一、并发
并发程序是指在运行中有两个及以上的任务同时在处理,与之相关的概念并行,是指在运行中有两个及以上的任务同时执行,差别是在于处理和执行。在单核CUP中两个及以上任务的处理方式是让它们交替的进入CUP执行,这种对执行的处理方式就是并发。并行只能发生在多核CUP中,每个CUP核心拿到一个任务同时执行,并行是并发的一个子集
与串行程序相比并发编程的优点:
1) 提高硬件资源的利用率(特别是IO资源),提高系统的响应速度、减少客户端等待、增加系统吞吐量
2) 解决特定领域的问题,比如GUI系统,WEB服务器等。
如何实现并发:
1) 进程并发,PHP(pcntl_fork)、PYTHON(multiprocessing)中很常见基于多进程并发。
2) 线程并发,JAVA、C#以线程作为执行体进行并发。
3) 协程并发,GOLANG、SCALA中基于协程的并发,虽然协程是在线程中进程调度的,但是协程有自己的寄存器和栈,调度切换完全在用户态进行。可以简单的理解协程与线程间是N:1的关系,所以协程避免了线程创建和上下文切换的系统开销,理论上可以支持更大的并发量。
二、线程实现
在操作系统中线程是包含在进程中的消费资源较少、运行迅速的最小执行单元,根据操作系统内核是否对线程可感知,把线程分为内核线程和用户线程。编程语言的线程实现都是基于这两种线程之上。
1) 基于内核线程(Kernel-Level Thread,KLT)
使用内核线程的一种高级接口--轻量级进程(Light Weight Process,LWP)实现的