关于线程同时运行的本质
多线程号称能使多个任务同时运行,但是我记得这个多线程本质实际是分片段执行而已。
那么现在所谓双核CPU是否真的能让多个线程同时执行呢?比如一个核开一个?
------解决方案--------------------根本就不是同时执行,除非你的cpu数量多于线程数量
cpu会分配不同的时间片给不同的线程,所以感觉上是在同时执行
------解决方案--------------------这个......至少C#不能指定哪个核运行哪个线程
------解决方案--------------------多线程的本质是要把不想关的事情分开执行
A();
B();
在同一个线程中,B就要等A做完了才可以做,如果A和B没有关联,那么B为什么要等A做完呢,完全可以跟A并行的做啊。所以就有了多线程,多线程其实是操作系统的概念。
------解决方案--------------------线程是CPU调度的最小执行单位。如果你学过操作系统,就会知道Thread Context(线程上下文),它是一个结构体,而且对应的就是CPU的状态(CPU各个寄存器的值)。
对于单处理器来说,线程是并发的,但是它们轮流被调度给CPU。所谓“并发”,就是有可能在线程没有执行完之前,CPU切换到另一个线程。
对于多处理器来说,线程是并行的。它们可以被同时执行。稍微有点不同的是超线程处理器,它虽然被视作是并行的,但是其实内部处理并行的方式是通过延迟隐藏。这使得它并不真的像多处理器并行一样会遇到读写存储器的冲突,因此调试程序的时候,它不能完全反映并行环境可能遇到的问题。
------解决方案--------------------
------解决方案--------------------那我做一个实验是向数据库中插入数据的,别人用多线程同时插入明显快很多,这是为什么呢,按道理,时间应该是一样的啊