日期:2014-05-18  浏览次数:20887 次

关于线程同时运行的本质
多线程号称能使多个任务同时运行,但是我记得这个多线程本质实际是分片段执行而已。

那么现在所谓双核CPU是否真的能让多个线程同时执行呢?比如一个核开一个?

------解决方案--------------------
根本就不是同时执行,除非你的cpu数量多于线程数量

cpu会分配不同的时间片给不同的线程,所以感觉上是在同时执行
------解决方案--------------------
这个......至少C#不能指定哪个核运行哪个线程
------解决方案--------------------
多线程的本质是要把不想关的事情分开执行
A();
B();
在同一个线程中,B就要等A做完了才可以做,如果A和B没有关联,那么B为什么要等A做完呢,完全可以跟A并行的做啊。所以就有了多线程,多线程其实是操作系统的概念。
------解决方案--------------------
线程是CPU调度的最小执行单位。如果你学过操作系统,就会知道Thread Context(线程上下文),它是一个结构体,而且对应的就是CPU的状态(CPU各个寄存器的值)。

对于单处理器来说,线程是并发的,但是它们轮流被调度给CPU。所谓“并发”,就是有可能在线程没有执行完之前,CPU切换到另一个线程。

对于多处理器来说,线程是并行的。它们可以被同时执行。稍微有点不同的是超线程处理器,它虽然被视作是并行的,但是其实内部处理并行的方式是通过延迟隐藏。这使得它并不真的像多处理器并行一样会遇到读写存储器的冲突,因此调试程序的时候,它不能完全反映并行环境可能遇到的问题。
------解决方案--------------------
探讨
线程是CPU调度的最小执行单位。如果你学过操作系统,就会知道Thread Context(线程上下文),它是一个结构体,而且对应的就是CPU的状态(CPU各个寄存器的值)。

对于单处理器来说,线程是并发的,但是它们轮流被调度给CPU。所谓“并发”,就是有可能在线程没有执行完之前,CPU切换到另一个线程。

对于多处理器来说,线程是并行的。它们可以被同时执行。稍微有点不同的是超线程处理器,……

------解决方案--------------------
那我做一个实验是向数据库中插入数据的,别人用多线程同时插入明显快很多,这是为什么呢,按道理,时间应该是一样的啊