linux如何限制一个进程有多少线程 linux 创建一个线程的开销是多大?

[更新]
·
·
分类:互联网
4608 阅读

linux

linux 创建一个线程的开销是多大?

创建一个线程的开销是多大?

默认是8M,ulimint 查看, 建议写线程程序的时候,一定不要在循环中遗临时变量声明,结构体之类的更不行了,时间就来 会溢出内存,血的教训

linux下线程加不加有什么区别?

所有程序都是以进程为单位运行,进程中有多个子线程,一般有一个主线程,若干个子线程

怎么让一个线程一直运行?

不会出现问题的,具体过程如下。
假设线程开始运行在core1上,对内存x将旧值b更改成新值a,在完成mov [x], a指令时,a这个值至少已经写到core1上的store buffer里面了。
线程要被迁移到core2,那必须是它被抢占,或主动让出cpu,或者主动睡眠才可以发生迁移到core2. 但不管什么情况,它必须在core1执行完schedule函数之后,才会发生迁移。
而schedule函数有以下一段代码:
注意上述最后两条语句,它会产生一个mb,意味着执行到mb之后,刚才将x修改为a的操作,会从store buffer写到L1 Cache,并且会将invalid message发送到其它核的invalid queue上。
之后线程才被调度出来了。
而线程被core2迁移过来时,它要执行,也必须是另一个线程执行schedule之后才能轮到该线程执行。同样,scheuld函数在core2执行时,因为有mb语句,它必须将本core2的invalid queue上的请求应用到本核的L1 Cache上,才能往前执行,此时Core2上L1 Cache上x的值状态变为invalid。
所以线程在core2执行完schedule后,还没有返回到用户态执行,那此时Cache情况如下:
Core1: x值,有效,为a,Exclusive状态
Core2: x值,无效, 因为收到core1的invalide message并应用到本Cache
然后线程执行到用户态时,访问x变量,本地cache是invalid,会发送读cache请求到core1,core1返回x的值为a给core2,此时core1/core2对x地址的状态均为Share。
所以Linux已 处理好进程调度与Cache的关系了。