在Windows中,如果一个线程正在执行非常耗费C++的操作,createThread()会导致一些线程变慢。createProcess()会缓解这个问题吗?如果是这样,createProcess()是否意味着代码必须驻留在第二个可执行文件中,或者这一切都可以发生在同一个可执行文件中?
发布于 2011-04-15 21:44:49
进程和线程之间的主要区别是,每个进程都有自己的内存空间,而线程共享它们在其中运行的进程的内存空间。
如果一个线程确实是CPU受限的,那么只有当另一个线程都在同一个处理器核心上执行时,它才会减慢它们的速度。createProcess不会缓解这个问题,因为进程仍然会有相同的问题。
另外,你在哪种机器上运行这个程序?它是否有多个核心?
发布于 2011-04-15 21:50:07
不太可能--一个进程比一个线程“重”得多,所以它可能会更慢。我不知道您对第二个可执行文件的要求是什么,但您可以在同一个.exe上使用createProcess。
http://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx
这听起来像是您在追踪一些性能问题,所以也许尝试一个面向线程的分析器会很有帮助:http://software.intel.com/en-us/articles/using-intel-thread-profiler-for-win32-threads-philosophy-and-theory/
发布于 2011-12-30 10:21:32
每个进程都提供执行程序所需的资源。进程具有虚拟地址空间、可执行代码、系统对象的开放句柄、安全上下文、唯一进程标识符、环境变量、优先级、最小和最大工作集大小以及至少一个执行线程。每个进程都以单个线程(通常称为主线程)启动,但可以从它的任何线程创建额外的线程。
线程是进程中可以调度执行的实体。进程的所有线程共享其虚拟地址空间和系统资源。此外,每个线程维护异常处理程序、调度优先级、线程本地存储、唯一线程标识符和一组结构,系统将使用这些结构来保存线程上下文,直到它被调度。线程上下文包括线程的机器寄存器集、内核堆栈、线程环境块和线程进程的地址空间中的用户堆栈。线程还可以有自己的安全上下文,可用于模拟客户端。
https://stackoverflow.com/questions/5677650
复制相似问题