多线程是可以并行处理数据的。
比如我开了4个线程,每个线程申请一个内存,我把它写入到某个指针(地址空间)去。这时候cpu多核就展现出来,可以同时写入数据。只是大部分情况下一般程序开发者用不了那么精度的计算,所以成就了协程。
那么我们说说协程。
协程理论上只是并发处理数据,而不是并行处理数据。并发的意思一个线程下,单核内,它一个个执行任务,遇到阻塞情况下会去执行未被阻塞的代码。当代码不阻塞了它又回来继续执行,协程是无法利用多核cpu去处理数据。
所以线程和协程哪个快?
这个要根据使用场景,它们各有各的的优势。
在多核电脑的情况下,想完整使用电脑性能。又不想占用太大资源。那么多线程+协程效率最佳。
Python程序员的话使用多进程+协程就行。
为什么会造成协程比多线程快的原因?
现在网上很多人拿多线程和多协程比较,认为协程运行速度比线程快。
一个单核cpu同一时间只能处理一个线程,4核cpu则可以同时处理4个线程,当我4核cpu开了500个线程的时候,这时候cpu则会根据情况给个特定时间运行一段线程后执行下个线程,但是cpu在切换的时候会有资源开销,这个时候会产生一段比较长”延时”。
协程是一个线程的最小单位,它在线程里执行代码切换资源时,消耗的资源比较少,协程”延时”对比线程”延时”没那么明显。所以执行效率高很多。
协程只是单核cpu单线程情况下效率优化到最佳。
如果多线程+协程方式则可以把多核cpu优化到最佳,最快,最省系统资源。
所以Python是多线程吗?不是,Python的多线程实际就是多协程。
Python当个辅助工具还真是挺好使,方便,开发效率高的同时也舍弃了很多东西。但是确实不适合用来比速度。。。