线程与进程 深入剖析与点拨 - 海阔天空 - 博客频道 - CSDN.NET
1. 什么是进程?进程就是一个正在执行的程序的实例,包括程序计数器,寄存器和变量的当前值。
进程用于把资源集中在一起, 多个进程共享物理内存,磁盘,打印机和其他资源。
2. 引入线程的目的:实现并行实体共享同一个地址空间和所有可用数据的能力。换句话说在同一个进程中所有的线程共享地址空间,由于线程只拥有寄存器用来保存线程当前的工作变量,所以更加轻量级。
3. 时钟中断, 时钟中断是针对进程的, 时钟中断的目的是实现并行(伪并行), 这样不同的进程都有机会获得时间片而运行。但是在一个单独的进程内部是没有时钟中断的,也就是说不可能在一个线程运行后再让其他线程运行,如果线程不释放CPU并且是CPU密集的, 那么使用多线程则无意义。(比如设计一个算法, 耗费bigO时间O(n), 并且是时间秘籍的, 只有一个CPU的情况下使用多线程是毫无意义的,或者说基本不会提高算法的执行时间)。
4. 进程间的通信模型要比线程复杂。但是如果两个或多个进程共享其全部或大部分的地址空间,进程和线程之间的差别就变得模糊起来,但无论怎样,两者的差别还是有的。共享一个公共地址空间的两个进程仍旧有各自的打开文件,白净定时器以及其他一些单个进程的特性,而在单个进程中的线程,则共享进程全部的特性,另外,共享一个公共地址空间的多个线程不会拥有用户级线程的效率,这一点是不容质疑的。
5. 线程与进程还有一个关键差别,在线程完成运行时,例如,在调用thread_yield是,pthread_yield代码可以把该线程的信息保存在县城表中,进而它可以调用线程调度程序来选择另一个要运行的线程。保存该线程状态的过程和调度程序都是本地过程,所以启动他们比进行内核调用效率更高。并一方面,不需要陷阱,不需要上下文切换,也不需要对内存高速缓存进行刷新,这就使得线程调度非常快捷。
Read full article from 线程与进程 深入剖析与点拨 - 海阔天空 - 博客频道 - CSDN.NET
No comments:
Post a Comment