并发编程的核心内容是指计算机能够以任何顺序来执行的独立计算机。例如,在代码中可以独立执行的循环迭代和函数调用都属于独立计算。从串行代码中提取出来并发工作可以分配到多个线程上(或者相互协作的进程上),并且可以在多核处理器中的任何一个核上运行(或者在单核处理器上运行,此时需要将不同的独立计算换入/换出处理器,从而形成一种并行执行的假象)。
要想将并发工作分配到多个线程上,需要调用一些实现了线程化机制的库函数。这些额外的函数调用将增加并发执行的开销(overhead),因为最初的串行代码中并不包含这些函数调用。任何为了控制和协调线程而增加的额外代码,尤其是调用线程化库函数的代码,同样是一种开销。此外,还需要增加一部分代码来判断计算是应该继续执行,还是应该获取更多的工作或者在满足指定的条件时触发其他线程。这也是需要考虑的开销。不仅如此,还需要增加一些代码专门用来确保将等量的工作分配到每个线程上。这种线程之间的负载均衡可以使线程不会处于空闲状态并浪费系统资源,这同样可以被认为是一种开销。在并发代码中必须尽可能高的在最低水平。要想获取最大程度的性能提升并且使并发代码实现尽可能高的可伸缩性,那么分配到每个线程的工作就可以足够多,以便减少或者掩盖由于这些开销而带来的负面影响。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14221429/viewspace-678529/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14221429/viewspace-678529/