A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 友来友网 中级黑马   /  2018-3-14 15:28  /  682 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、并发

       并发程序是指在运行中有两个及以上的任务同时在处理,与之相关的概念并行,是指在运行中有两个及以上的任务同时执行,差别是在于处理和执行。在单核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)实现的线程(通常意义上的线程),它与内核线程是一对一的关系。线程的创建,初始化,同步,切换(用户态、内核态)都需要内核调度器(Scheduler)进行调度,消耗内核资源,每一个轻量级进程都需要一个内核线程对应,所以这线程能创建的数量是也是有限的。
2):基于用户线程
       建立在用户空间的上的线程,内核对此无感知。线程的创建、调度在用户态完成,不需要系统内核支援。由于没有系统内核的支援,所有的线程操作都需要用户程序自己处理。线程的创建、切换和调度都是需要考虑的问题,而且由于操作系统只把处理器资源分配到进程,如“阻塞如何处理”,“多处理器系统中如何将线程映射到其它处理器上”这类问题解决起来将会异常困难,甚至不可能完成。
3):基于用户线程和内核线程混合
        即使用内核线程(轻量级进程),也使用用户线程。用户线程依然建立在用户空间上,线程的创建、调度、处理器映射能够得到内核线程的支援,实现简单。用户线程与轻量级进程(内核线程)是N:M的对应关系,可以支持大规模的并发。





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马