我有想要在Windows上尽可能快地运行的C代码
此代码在数字范围内运行,并对每个数字执行大量的cpu工作。
每个数字独立于其他数字。
因为我想要最快的速度,所以我希望在我所有的CPU内核上运行它。
我现在要做的是,例如,我需要在0-1000的范围内运行,并且我有10个内核,我创建了10个c代码进程,并将它们之间的工作分开。
Process1在0-100范围内运行,process2在100-200范围内运行,依此类推。
我们知道将每个进程分开使用不同的内核(因为每个进程使用大量的cpu),所以当我查看任务管理器时,我所有的内核都是100%的使用率。
通过这种方式,每个流程的运行时间约为5小时(因此分配时间可以忽略不计)
如果我将为每个核心创建线程(而不是为每个核心创建进程),我知道操作系统会知道将线程与核心分开,这样会更快吗?
也许进程具有不同的调度程序或其他功能,所以线程将运行得更快。
也许很多进程会降低操作系统与1个进程中的线程的速度
答案 0 :(得分:0)
如果我将为每个核心创建线程(而不是为每个核心创建进程), 知道操作系统会知道将线程与内核分开,这是 更快?
OS知道如何高效地向内核分配线程-但是,OS也知道如何以高效的方式向内核分配进程,因此,仅通过切换到将多进程模块转换为多线程模型。也就是说,您已经获得了希望获得的好处。
对于这样的问题,您最好寻找优化处理循环的方法(例如,也许可以使用SSE指令或找到更有效的算法?)
答案 1 :(得分:-1)
简单的解释:https://www.techopedia.com/definition/24297/multithreading-computer-architecture
多线程是一种执行模型,它允许多个线程存在于进程的上下文中,以便它们独立执行但共享进程资源。线程在其宿主进程的地址空间中维护与其执行相关的信息列表,包括优先级调度,异常处理程序,一组CPU寄存器以及堆栈状态。
通过允许主执行线程响应用户输入,线程可以在单处理器系统中使用,而其他工作线程可以执行不需要用户在后台干预的长时间运行的任务。多处理器系统中的线程可在多个处理器之间真正并发执行线程,因此速度更快。但是,它需要更仔细的编程,以避免出现非直觉的行为,例如赛车条件,死锁等。
操作系统通过两种方式使用线程处理:
抢先式多线程,其中上下文切换由操作系统控制。上下文切换可能在不适当的时间执行,因此,高优先级线程可能被低优先级线程间接抢占。
协作多线程,其中上下文切换由线程控制。如果线程在等待资源释放时被阻塞,则可能导致死锁之类的问题。
Windows的32位和64位版本使用抢占式多线程,其中共享可用处理器时间,以便所有线程获得相等的时间片并在队列中进行服务-基于模式。在线程切换期间,已抢占线程的上下文被存储并重新加载到队列中的下一个线程中。时间片是如此之短,以至于正在运行的线程似乎是并行执行的。
我认为您的问题很快进入了并行编程领域,在较小程度上,给定的操作系统如何行为和处理进程或线程。
刺中答案,并尽可能快地运行