线程、进程、协程、并发、并行、同步、异步

进程与线程(Process--Thread):
        线程是真正工作的那个单元,而进程可以理解为线程的容器。
         对于一个程序,至少有一个进程,而一个进程下至少有一个线程。可以这样类比,例如:
        对于一个工厂,至少有一个车间,而一个车间下至少有一名工人。
        为了提高产能,可以(1)创建多个车间,每个车间内1个工人各自使用其中车间的资源,也就是多进程;
                也可以(2)在一个车间中招进多个工人,所有工人公用车间内的资源,也就是多线程。
        对于python代码,一个py文件可以理解为一个工厂(程序),其中可以有多个进程,一个进程下又可以有多个线程。
    
    多进程效率>多线程效率>单进程单线程串行效率
    
协程(Coroutine):协程不是计算机所天生提供的,而是由程序员创造出来的。
        协程也可以被称为微线程,是一种用户态内的上下文切换技术。
        简而言之,其实就是通过一个线程实现代码块之间相互切换执行。
        以python为例,有这样一段代码:

    def func1():
        print(1)
        print(2)
    def func2():
        print(3)
        print(4)
    func1()
    func2()


        协程就是在func1()和func2()中的几个print间交替执行而不是以打印1234这样的正常顺序。
        那么如何实现协程呢?有这样几种办法:
        (1)基于greenlet模块(早期的一种模块)
        (2)yield关键字(通过寄存的思想)
        (3)通过asyncio模块的装饰器(python3.4后引入的)
        (4)async、await关键字(python3.5后引入的)【主流办法】
并发(Concurrency):计算机同时执行多项任务。例如:
        对于单核心处理器:计算机可以通过分配时间片的方式,
        让多个任务中每个任务运行一段时间再切换下一个任务,这种方式被称为上下文切换(context switching)


        实际上这种方式并不是真正的同时执行,而是由于时间片过短,在视觉上看上去是同时执行。
        对于多核心处理器:可以让不同的任务 同时的在多个核心上进行,是真正的并行,即下文中的Parallelism
并行(Parallelism):
        让多个任务真正的同时进行。


同步(Synchronous):并不是字面上的同步,更好的可以理解为“同道”。
        也就是让不同的任务在同一条道路上执行,但是要分先后,上一个任务执行完才执行下一任务。


异步(Asynchronous):更好的可以理解为“异道”。
        即两个任务在不同的道路上,同时执行。


        多线程就是实现异步的一种方式。(异步是一种思想,多线程是其实现方式。)
        当是多核心处理器时,每个线程就会被分配到不同的核心上执行,实现真正的并行。
        当是单核心处理器时,则会通过分配时间片的形式,并发执行任务。也可以将并发理解为一种异步,但并发绝对不是同步。
        

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值