小弟我的关于进程与函数的理解
我的关于进程与函数的理解
比如这样一个程序
main()
{
X()//函数
}
执行过程是main执行到X函数,则主程序把控制权交给X()函数,执行X()函数,当X()函数执行完之后再把控制权交给主程序。主程序继续执行。
而如果是
main()
{
AfxBeginThread(X())//线程
}
执行过程是main执行到X()线程,主程序并不把控制权交给X()线程,只有当主程序执行完之后才把控制权交给线程。线程开始执行。
——————————
有种说法是,函数与主程序可以看作是串行关系,而线程和主程序可以看作是并行关系。照上面这样一个程序来说,线程与进程也是一种串行关系啊?怎么能说是并行关系呢?谢谢
------解决方案--------------------
各位大虾,弱弱的问个问题哈,多核CPU的多线程程序中,主线程是仍只有一个还是多个?要是一个是在哪个核上呢?要是多个,他们是如何开始线程的呢?
------解决方案--------------------
主线程是针对进程而言的,进入main或WinMain的线程,只能有一个。与是否多核没有关系。既然在哪个核上运行,应该可以有相关的SDK设定吧
------解决方案--------------------
cpu有一个时间片,执行到一个线程CPU就会为该线程分配一个时间片,该线程的时间片到了会自动去执行另外一个线程,这个时间片一般很小,感觉不到,在单核上不可能做到并行,但是可以做到并法(一段时间内在同时运行)
lz这说法"只有当主程序执行完之后才把控制权交给线程。线程开始执行。 "所以就不对了.
------解决方案--------------------
main()函数所在的线程应该是这个进程里的主线程。
如果新起一个子线程的话,
操作系统是会按照一定的调度算法在某个时间将主线程调出处理器而把子线程调度进处理器。
而并不是LZ所认为的要在main执行结束再执行新起的子线程
。。。。。。。。。
------解决方案--------------------
不懂
------解决方案--------------------
学习学习
------解决方案--------------------
进程只是资源和数据的集合,代码的执行是在线程中进行的。默认情况下会有一个主线程之行main中的代码,如果我们在main中创建子线程之行其他操作的话,主线程和子线程是并行之行的,不知道这样说对不对...
------解决方案--------------------
当然如果我们在主线程中将主线程挂起,等待子线程执行完毕后通知主线程,主线程才继续执行下去。
------解决方案--------------------
------解决方案--------------------
看起来好复杂 我还是新手呢
比如这样一个程序
main()
{
X()//函数
}
执行过程是main执行到X函数,则主程序把控制权交给X()函数,执行X()函数,当X()函数执行完之后再把控制权交给主程序。主程序继续执行。
而如果是
main()
{
AfxBeginThread(X())//线程
}
执行过程是main执行到X()线程,主程序并不把控制权交给X()线程,只有当主程序执行完之后才把控制权交给线程。线程开始执行。
——————————
有种说法是,函数与主程序可以看作是串行关系,而线程和主程序可以看作是并行关系。照上面这样一个程序来说,线程与进程也是一种串行关系啊?怎么能说是并行关系呢?谢谢
------解决方案--------------------
各位大虾,弱弱的问个问题哈,多核CPU的多线程程序中,主线程是仍只有一个还是多个?要是一个是在哪个核上呢?要是多个,他们是如何开始线程的呢?
------解决方案--------------------
主线程是针对进程而言的,进入main或WinMain的线程,只能有一个。与是否多核没有关系。既然在哪个核上运行,应该可以有相关的SDK设定吧
------解决方案--------------------
cpu有一个时间片,执行到一个线程CPU就会为该线程分配一个时间片,该线程的时间片到了会自动去执行另外一个线程,这个时间片一般很小,感觉不到,在单核上不可能做到并行,但是可以做到并法(一段时间内在同时运行)
lz这说法"只有当主程序执行完之后才把控制权交给线程。线程开始执行。 "所以就不对了.
------解决方案--------------------
main()函数所在的线程应该是这个进程里的主线程。
如果新起一个子线程的话,
操作系统是会按照一定的调度算法在某个时间将主线程调出处理器而把子线程调度进处理器。
而并不是LZ所认为的要在main执行结束再执行新起的子线程
。。。。。。。。。
------解决方案--------------------
不懂
------解决方案--------------------
学习学习
------解决方案--------------------
进程只是资源和数据的集合,代码的执行是在线程中进行的。默认情况下会有一个主线程之行main中的代码,如果我们在main中创建子线程之行其他操作的话,主线程和子线程是并行之行的,不知道这样说对不对...
------解决方案--------------------
当然如果我们在主线程中将主线程挂起,等待子线程执行完毕后通知主线程,主线程才继续执行下去。
------解决方案--------------------
------解决方案--------------------
看起来好复杂 我还是新手呢