Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
178 views
in Technique[技术] by (71.8m points)

php的 curl_multi库 跟 多线程 有什么关系

问题1:官网中对curl_multi的描述没有提到其跟多线程有什么关系
问题2:执行curl_multi的时候,使用pstree以及ps -T -p查看进程,也没有发现有多线程
问题3:curl_multi的底层原理是怎么样的呢


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

你不用管它几个线程,反正它运行时,必然有一个进程,有一个进程必然有一个主线程来运行入口函数
这就表示
1 一个进程必然有一个主线程,必然有一个入口函数的执行。
2 你启动多个进程【就是启动多个线程,但是进程的内存空间互相分离】
3 即使它在一个进程中使用了多线程,那么每个线程都是有自己的入口函数,每个线程的入口函数,要么执行代码相同,要么不相同,执行流程:完全受系统管制,线程a,线程b,等执行要么抢占式运行,要么谁抢到锁【是否用锁,锁定堆栈区的共享数据,看源码】谁运行。
4、多线程场景下,运行会发生并发和并行情况【可以理解并发=并行,这问题不大】
5、协程大部分都是低层开发者自行撸的一套规则,你要开协程,必然要开个进程,你进了个进程,必然也开了个主线程,三者同时存在【操作系统强制给你开】,有的人写的协程大部分是在一个主线程的基础上做,是要受主线程管制的,一般来说单主线程实现协程是最简单的,如果开了多个线程,那么调度管理将不由你开发人员来控制了。
总结
平常我们启动一个进程,就已经默认启动了一个主线程开始运行入口函数,就算你开大堆的线程,每个线程干的活要么全相同,要么不相同,不管相同不相同,每个线程都有自己的入口函数,都是使用同一个堆栈内存空间,涉及到共享数据的操作,你还得完成数据保护,而多线程的目的只是利用了cpu多核能实现并行并发运行的好处,不要认为这些很神奇。并且你开了大堆的线程,cpu总得来回切换,总得要保存一些数据,来回切换总得花大堆时间,时间都花在切换上了,线程的入口函数业务逻辑都没有时间运行了。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...