代码实现
实现Run 实现Flock 前面提到进程的文件锁,实际上Run也用到了,可以试想下以下的场景。 用户A执行run pt-summary,由于本地已经缓存了所以会直接运行本地的脚本。同时用户B执行run -u pt-summary,加上-u或...
实现Run 实现Flock 前面提到进程的文件锁,实际上Run也用到了,可以试想下以下的场景。 用户A执行run pt-summary,由于本地已经缓存了所以会直接运行本地的脚本。同时用户B执行run -u pt-summary,加上-u或...
Run项目架构 Run是一个命令行工具,没有复杂的CS或BS架构,只是通过解析命令行或者配置文件来下载运行相应的脚本。 Flock Run使用了前面提到的进程文件锁,避免同时运行同一个脚本。同时运行同一个脚本会有什么问题呢?例如我们run ...
Namespaces简介 Linux Namespaces是资源隔离技术,在2.6.23合并到内核,而在3.12内核加入对用户空间的支持。 Namespaces是容器技术的基础,因为有了命名空间的隔离,才能限制容器之间的进程通信,像虚拟内存...
Cgroups Cgroups全称Control Groups,是Linux内核用于资源隔离的技术。目前Cgroups可以控制CPU、内存、磁盘访问。 使用 Cgroups是在Linux 2.6.24合并到内核的,不过项目在不断完善,3.8...
写时复制(Copy On Write) 一般我们运行程序都是Fork一个进程后马上执行Exec加载程序,而Fork的时候实际上用的是父进程的堆栈空间,Linux通过Copy On Write技术极大地减少了Fork的开销。 Copy On ...
共享内存 对于共享内存是好是坏,我们不能妄下定论,不过学习一下总是好的。 不同进程之间内存空间是独立的,也就是说进程不能访问也不会干扰其他进程的内存。如果两个进程希望通过共享内存的方式通信呢?可以通过mmap()系统调用实现。 Go实例 G...
简介 Epoll是poll的改进版,更加高效,能同时处理大量文件描述符,跟高并发有关,Nginx就是充分利用了epoll的特性。讲这些没用,我们先了解poll是什么。 Poll Poll本质上是Linux系统调用,其接口为int poll(...
文件描述符 Linux很重要的设计思想就是一切皆文件,网络是文件,键盘等外设也是文件,很神奇吧?于是所有资源都有了统一的接口,开发者可以像写文件那样通过网络传输数据,我们也可以通过/proc/的文件看到进程的资源使用情况。 内核给每个访问的...
系统调用 我们要想启动一个进程,需要操作系统的调用(system call)。实际上操作系统和普通进程是运行在不同空间上的,操作系统进程运行在内核态(todo: kernel space),开发者运行的进程运行在用户态(todo: user...
进程间通信 IPC全称Interprocess Communication,指进程间协作的各种方法,当然包括共享内存,信号量或Socket等。 管道(Pipe) 管道是进程间通信最简单的方式,任何进程的标准输出都可以作为其他进程的输入。 信...