进程 vs 线程

发布于 2017-10-13 10:16:28

进程(process)和线程(thread)都提供了程序间的隔离。~~个人理解,不同的是,进程是操作系统级别的基本调度单位,线程是CPU级别的基本调度单位。~~了解更多之后,发现操作系统也有对线程的调度能力。

进程

进程有它独立的虚拟地址空间、可执行代码、系统对象的句柄(handles)、最小和最大的工作集(working set)大小、至少一个线程

多个进程可以由一个程序组织起来。多个进程可以在多核环境下并行地执行。单核环境下,由系统的进程调度算法来实现一个模拟的并行幻象。

线程

线程是进程内的一个实体,是“调度”的最小单位,可以称之为一个任务Task。单个线程持有很少的私有资源,如程序计数器,一组寄存器和栈。所有线程共享进程的虚拟地址空间和系统资源(CPU、IO、系统中断、主内存、交换内存swap)。

一个进程的多个线程可以在多核上同时跑(windows和linux都支持),一个进程可以在被挂起后迁移到另外一个核心上面跑(ARM CPU支持)。这又涉及到内核间的缓存一致性如何保证的问题,略。

至于缓存的一致性就要靠MESI协议来保证,我们在多线程中要使用rmp() wmb()保证

其他

微软的这篇文章About Processes and Threads (Windows)讲了windows的进程线程模型,涉及到了这几个概念:

  • process
  • thread
  • preemptive multitasking: creates the effect of simultaneous execution of multiple threads from multiple processes
  • job object: allow a group of processes to be managed as a unit
  • thread pool: combine worker threads and queue to reduce the number of application threads
  • User-mode scheduling(UMS): is a lightweight mechanism that applications can use to schedule their own threads without involving the system scheduler and regain control of the processor if a UMS thread blocks in the kernel. This require few system call comparing to thread pool.
  • fiber: is a unit of execution that must be manually scheduled by the application. Fibers run in the context of the threads that schedule them. Each thread can schedule multiple fibers.

两门关于操作系统的国外课程,都可以返回上层链接来查看课程主页:

题外话

因为MS的链接存在括号,尝试转义也不行,括号是URL本来就支持的,换了种方式就可以了,学到了markdown的多种链接格式

还要学一下xperf做性能分析,还有wpa的可视化?

comments powered by Disqus