如果某个支持两个或者多个动作同时存在,那么这个系统就是并发系统;如果某个支持两个或者多个动作同时执行,那么这个系统就是并行系统。
在并发程序中可以同时拥有两个或者多个线程。如果程序在单核处理器上运行,那么这两个线程将会交替的换入或换出内存,这些线程是同时存在的。
如果程序能够并行执行,那么就一定运行在多核处理器上,此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。
“并行”概念是“并发”概念的子集
多线程存在存储冲突、数据竞争的问题
多线程,充分压榨CPU资源,但也不是越多越好
多线程会存在线程上下文切换,会导致程序执行速度变慢
原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
可见性:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
有序性:即程序执行的顺序按照代码的先后顺序执行。
指令重排序,一般来说,处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证程序中各个语句的执行先后顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。
从上面可以看出,指令重排序不会影响单个线程的执行,但是会影响到线程并发执行的正确性。
也就是说,要想并发程序正确地执行,必须要保证原子性、可见性以及有序性。只要有一个没有被保证,就有可能会导致程序运行不正确。
说点什么
您将是第一位评论人!