1.在工作中和教科书上经常提到几个基本概念,并发,并行,阻塞,非阻塞,同步,异步。
实际上很多同学都没搞清楚这几个概念,有时候容易搞混淆
我也只是凭自己对他们的认识,解释下他们几个概念:
并行:实际很好理解,就是同时进行,实际上在同一台机器并行运行在单核时代是不可能得,当然显卡中很多是并行运行的。而在多核时代,并行运行是可能的,不同线程,进程可以在不同核心上并行运行,这也提高了多任务系统的吞吐量,简单的说就是同一时刻在运行多段代码,并且互不干扰,这就并行,想分布式系统很多就是并行计算的。
并发:并发就是一段时间内,几段代码交错间隔运行,其主要的作用是防止当个大任务,占据太多的时间,小任务得不到运行,将大任务拆解成若干片段运行,这样大家都有平等运行的机会了。
阻塞:主要是网络编程中,就是函数一直等待数据或者事件发生才返回,而在该线程中,程序将停止在该函数处不往下运行,知道满足数据和事件发生。
非阻塞:不管有没有满足的数据,和事件都将立即返回,并能继续运行该线程的运行。
阻塞代理的问题可能使得程序僵死,但开销较小,但编码要求低,而非阻塞程序开销大,并且要处理各种异常情况,编程要求高。
同步:通俗讲就是,先有鸡和先有蛋的问题,总之得先满足前一个条件,才能满足下一个条件,在网络编程阻塞模型很多情况就是,只有收到,才能发送。
异步:通俗讲就是,井水不犯河水,在网络编程中就是,发送和接收可以同时进行,互不干扰。