并发、线程、进程与多线程技术 最近在看python,python一个很大的特色是支持多线程编程,相比之下PHP是没有这个功能的,这也是很多人在高并发的情况下选择Python的原因之一。那到底什么是线程、什么是进程、什么是并发、什么是多线程技术呢?下面详细道来。 一、 什么是并发 在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。 这里需要注意并发和并行是不同的两个概念。并发是指一个时间段内同时运行,这是个区间;而并行是指在同一个时间点上运行,这个是一个点。而且并发在同一个时间点上只能是一个程序在运行。 二、 什么是进程
Windows系统下我们打开任务管理器,点击“进程”,就会出现一个表格,表格的每一行都是一个进程,比如说QQ.exe,NOTEPAD.exe等;
通俗的说法就是每打开一个应用程序,如QQ、暴风影音,系统就打开了一个进程。系统为这个进程分配相关的资源,比如cpu、内存。 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。 三、 什么是线程 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独
立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行
的程度,从而显著提高系统资源的利用率和吞吐量。 线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU 四、什么是多线程技术 可以把一个正在运行的软件看做一个进程,就像一个大的管道,这个管道不运送什么东西,但里面有很多个小的管道,每个小管负责的东西不同,而这些小管道就可以看做是一个个线程。 如果运行的是一个单线程的程序的话,而这个线程需要连续运行几个功能时,如果正在运行的那个功能因碰到一个等待或者睡眠的指令的话,他就会停在那里不做任何事,此是这个CPU就空闲在那里,同时还会等待直到程序重新继续运行。 如果使用多线程技术,那么可以把这几个功能同时(并不是绝对意义上的同时)运行,当其中一个功能遇到睡眠指令的时候,其他没有睡眠的继续运行,这个可以花更短的时间,让CPU更充分的被利用来完成需要的事情~线程通常共享一个代码区,但有各自独立的数据存储区 。 五、 总结 电脑里面最宝贵的资源就是CPU,现代电脑里面往往是其他硬件的瓶颈如网络IO慢,内存数据读取慢导致了cpu资源的浪费(因为cpu需要等待),多线程技术的提出解决了cpu等待的难题,当某个线程由于别的原因需要挂起的时候cpu可以马上分配给别的线程。 单核cpu系统永远不可能实现并行,cpu只能是异步的分配给进程更进一步的说应该是线程。 多核cpu的话就有可能实现并行了,既同一个时间点运行两个进程。 单线程技术由于是顺序执行,内存、cpu等核心资源占据时间过长、执行效率低下,当高访问量、高并发的情况下就有点捉襟见肘了。 |
|
来自: java_laq小馆 > 《系统架构》