b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

如何理解多线程并发编程?cpu线程导致的程序错误

电脑杂谈  发布时间:2021-02-05 23:05:08  来源:网络整理

cpu线程是什么意思?线程在程序中是一个独立的、完整的、可编程的运行资源管理机制。根据操作系统内核规定了一些名为线程的运行资源和其他资源管理机制。然而,在操作系统实现方面不同语言的处理器实现了不同的资源管理机制。线程由sched管理。如何理解多线程并发编程?举个栗子。我们有两条线程a和b,它们可以在同一台机器上共享一个2g的内存空间。

然而,由于两个线程都可以调用堆栈。我们可以有如下处理:每个线程c对于堆栈使用不同的内存地址,c1可以读取c2的内存地址,c2可以访问c1的堆栈。然而,对于线程a,他对于堆栈使用的空间是共享给c1的,所以a和c1都访问不同的内存地址,从而让程序运行效率变得不同,所以我们希望减少a线程和c1线程使用内存地址不同的情况下程序运行效率的差异。

我们可以使用1*2的cache,从而产生如下的效果:对于a线程,每次使用堆栈都是从栈顶读取的,而对于c1线程来说,每次使用堆栈都是从堆栈头读取的。所以,a线程在堆栈读取时会被阻塞:如果a线程和c1线程的数据都加大了,比如c1线程大了一倍,那么a线程在运行的过程中很可能会被阻塞。为了解决这个问题,c线程需要创建一个新的线程a来执行。

这样a线程被来回搬运内存时,堆栈只有c1线程能访问。这样,在a线程调用堆栈读取内存的时候,堆栈位置就会固定为c1线程的堆栈位置,这样就避免了c1线程阻塞导致的程序错误。为什么c线程要实现1*2的cache?这个2g的内存空间,是由c1线程申请的,是每个线程都有,所以当c1线程申请的2g内存不够时,要手动向c1线程申请。

cpu的四线程是什么意思_cpu线程是什么意思_国产四核八线程的cpu有哪些

下图分别是c1线程申请2gb内存的三种方式。但这样造成了一个问题:当c1线程申请时,c1不是空闲的状态。c1会占用c2线程的所有内存空间,所以当内存申请满了时,c1会把所有内存空间都给c2线程。但是c2线程会使用c1线程申请的空间。c1线程会占用1*2的cache。所以,需要设计一个新的线程a来处理堆栈读取,c1线程不会占用那么多。

然而,让c1线程不可达的内存空间必须是整数。第二种解决方案是先在c1线程申请,然后再让c2线程申请。但是这时c1线程已经没有1*2的cache空间,内存也已经占满了。如果让c1线程占用1*2的cache空间,会导致大量的堆栈进行push操作,这样会造成浪费。对于c2线程,c1线程可以setfill,这样能改变c1线程的大小,从而改变c1线程的访问数量。如何处理同时在多个线程中运行的代码?想象这样一个场景,有一个语句是printf("。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-354016-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 兰旭
        兰旭

        中国股市25年3000多点儿

      热点图片
      拼命载入中...