
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
线程是大多数程序员在学习过程中都需要熟练掌握的一个编程知识点,而本文我们就通过案例分析来简单了解一下,线程基础入门需要掌握哪些概念。
并行(parallel):同一时间,多个线程/进程同时执行。多线程的目的就是为了并行,充分利用cpu多个核心,提高程序性能
线程(threading):线程是操作系统能够进行运算调度的小单位,是进程的实际运作单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务。
进程(process):进程是操作系统进行资源分配的基本单位。多个进程并行的在计算机上执行,多个线程并行的在进程中执行,
进程之间是隔离的,线程之间共享堆,私有栈空间。
CLR为每个线程分配各自独立的栈(stack)空间,因此局部变量是线程独立的。
临界区(criticalsection):在同一时刻只有一个线程能进入,不允许并发。当有线程进入临界区段时,其他试图进入的线程或是进程必须等待或阻塞(blocking)
线程阻塞(blocking):指一个线程在执行过程中暂停,以等待某个条件的触发来解除暂停。阻塞状态的线程不会消耗CPU资源
挂起(Suspend):和阻塞非常相似,在虚拟内存管理的操作系统中,通常会把阻塞状态的进程的物理内存空间换出到硬盘,等需要再次运行的时候,再从硬盘换入到物理内存。描述进程没有占用实际的物理内存空间的情况,这个状态就是挂起状态。
运行时
线程在内部由一个线程调度器(threadscheduler)管理,一般CLR会把这个任务交给操作系统完成。线程调度器确保所有活动的线程能够分配到适当的执行时间,并且保证那些处于等待或阻塞状态(例如,等待排它锁或者用户输入)的线程不消耗CPU时间。
在单核计算机上,线程调度器会进行时间切片(time-slicing),快速的在活动线程中切换执行。在Windows操作系统上,一个时间片通常在十几毫秒(译者注:默认15.625ms),远大于CPU在线程间进行上下文切换的开销(通常在几微秒区间)。
在多核计算机上,多线程的实现是混合了时间切片和真实的并发(genuineconcurrency),不同的线程同时运行在不同的CPU核心上。仍然会使用到时间切片,因为操作系统除了要调度其它的应用,还需要调度自身的线程。
线程的执行由于外部因素(比如时间切片)被中断称为被抢占(preempted)。在大多数情况下,线程无法控制其在什么时间,什么代码块被抢占。
什么是进程退出?
进程退出一般出现在以下几种情况:
正常退出,进程执行完任务。
错误退出,进程遇到不可继续运行的错误(发生异常未捕获导致程序退出)
被操作系统终止,进程本身有问题,比如进程企图访问不属于自己的内存地址
被其它进程终止,比如通过资源管理器我们可以选择终止掉某个进程
以上只有前两种情况是进程自愿退出的,因此,总体上可以分为三类:进程自愿退出,操作系统终止进程以及进程终止进程。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。