main,run和线程链状结构深度分析
主线程是从main函数开始的。非主线程,是从run函数开始的。run不要当做是普通的函数,函数是翻译过来的,原文是procedure,意指过程。main的准确描述是entry,而run也应该是entry。区分procedure和entry的区别对理解线程很关键。
主线程main是可以接受输入参数的,int main(int argc, char *argv[]),这个参数在程序启动过程中通过控制台传入。同样道理,非主线程也可以传入参数,这个参数是通过什么形式传入的呢?是通过运行时里面的变量传入的。无论是运行c/c++程序,还是运行java程序,首先启动运行时,然后通过加载点main函数开启一个主线程,从而程序可以跑起来。程序里面都是通过类文件隔离开的,但是因为有运行时的存在,所以我们可以写一个单例的东西,然后在任意类中调用,这个单例就是存在运行时里面的。
线程是什么呢?它可不是看不见摸不着的。它就是一块数据结构,这个数据结构是一条链子,每个节点就是一个指令。main主线程里面启动了thread子线程,就形成了一种树状的结构,有父子关系。cpu从main切换到thread,就是从一条链子跳到了另外一条链子上。
线程里面可以启动事件循环,就是开启了while循环,一旦监听到事件,cpu就去处理事件,等事件处理完了再继续继续while里面的下一步,这时候就容易出现卡顿。卡顿了怎么办?内容挺多的,可不是我现在想说的东西。我现在只想说的是main,run,线程的链状数据结构。
备注:知识都不是我创造的,我也没有能力创造知识,一切知识来源于书本。以上内容是我学习mfc和qt过程中看书获得的认识。我感觉要想学好计算机,肯定要把面拓宽,只钻研java的人永远都是菜鸟。