Linux创建线程的属性设置
来源:互联网 发布:javascript 创建对象 编辑:程序博客网 时间:2024/06/05 16:27
如果线程调用函数:sleep()函数,就是挂起自己,线程挂起,此时CPU的时间片就会分配给其他进程。而如果当前线程自己轮询操作,就会一直使用系统分配给自己的时间片。
对于一个系统而言:系统会分配给线程时间片,同时系统执行调度程序也会花费时间,称为调度时间。
SCHED_OTHREAD 非实时调度策略。线程优先级为0,每个线程都不抢占其他的线程。线程会受到时间片的限制。会一直占用系统分配给他的时间片。
SCHED_RR 实时调度策略。线程优先级1-99,数值越大,优先级越高。系统分配给一个线程一个时间片,这个时间片运行过程中不会被打断。但是当时间片运行结束,下一个时间片会分给优先级更高的线程。
SCHED_FIFO 实时调度策略。线程优先级1-99,数值越大,优先级越高。时间片首先分配给优先级最高的线程。一旦时间片分配给一个线程,除非线程主动挂起和退出,该线程会一直占用CPU。线程按照不同的优先级有不同的线程队列。在一个队列中先进先出。
=>实时调度策略会抢占非实时调度策略。除非非实时的线程运行结束,否则实时的线程是不可能得到运行的。
一个进程里面可能有多种调度策略的线程。
pthread_attr_t attr;
struct sched_param param;
param._sched_prority = 10;
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr, SCHED_RR/SCHED_FIFO);
pthread_attr_setschedparam(&attr, ¶m);
pthread_create(xxx, &attr, xxx, xxx);
pthread_attr_destroy(&attr);
2. 线程优先级的作用范围:
PTHREAD_SCOPE_SYSTEM 线程的优先级的作用范围是整个系统。即线程和系统中所有的线程竞争CPU的时间。
PTHREAD_SCOPE_PROCESS 线程的优先级的作用氛围是当前进程。即线程和该进程中其他线程竞争CPU时间。
pthread_attr_t attr;
struct sched_param param;
param._sched_prority = 10;
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr, SCHED_RR/SCHED_FIFO);
pthread_attr_setschedparam(&attr, ¶m);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM/PTHREAD_SCOPE_PROCESS);
pthread_create(xxx, &attr, xxx, xxx);
pthread_destroy(&attr);
3. 线程和其他线程是否分家:
PTHREAD_CREATE_DETACHED 新线程不能用pthread_join函数来同步,而且在退出时自行释放所占用的资源。
PTHREAD_CREATGE_JOINABLE 默认值。可以使用pthread_detach(pthread_id)改变分家状态。
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
4. 线程栈的大小:
栈是线程的属性,在创建线程的时候,可以指定栈的大小。但是程序运行的过程中,栈的大小不能改变。即线程创建出来,大小就确定。
int stack_size;
pthread_attr_setstacksize(&attr, stack_size);
pthread_attr_getstacksize(&attr, &stack_size);
PTHREAD_STACK_MIN 栈的最小值
以上函数原型:
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
int pthread_attr_getschedparam(pthread_attr_t *attr, struct sched_param *param);
int pthread_attr_setscope(pthread_attr_t *attr, int scope);
int pthread_attr_getscope(pthread_attr_t *attr, int *scope);
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
线程的栈和进程的堆:
栈是系统自动分配,效率比堆高。(管理堆需要做更多的事,而且据说栈通常会放到告诉缓存中)
堆的大小比栈大的多,大小受限于系统有效虚拟内存空间。一个进程的堆的大小不是固定的?是当前申请的堆内存的大小。
全局数据区的大小有系统限制,一般比较大。是固定的?
对于一个系统而言:系统会分配给线程时间片,同时系统执行调度程序也会花费时间,称为调度时间。
创建线程时的属性设置
1. 线程的调度策略:SCHED_OTHREAD 非实时调度策略。线程优先级为0,每个线程都不抢占其他的线程。线程会受到时间片的限制。会一直占用系统分配给他的时间片。
SCHED_RR 实时调度策略。线程优先级1-99,数值越大,优先级越高。系统分配给一个线程一个时间片,这个时间片运行过程中不会被打断。但是当时间片运行结束,下一个时间片会分给优先级更高的线程。
SCHED_FIFO 实时调度策略。线程优先级1-99,数值越大,优先级越高。时间片首先分配给优先级最高的线程。一旦时间片分配给一个线程,除非线程主动挂起和退出,该线程会一直占用CPU。线程按照不同的优先级有不同的线程队列。在一个队列中先进先出。
=>实时调度策略会抢占非实时调度策略。除非非实时的线程运行结束,否则实时的线程是不可能得到运行的。
一个进程里面可能有多种调度策略的线程。
pthread_attr_t attr;
struct sched_param param;
param._sched_prority = 10;
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr, SCHED_RR/SCHED_FIFO);
pthread_attr_setschedparam(&attr, ¶m);
pthread_create(xxx, &attr, xxx, xxx);
pthread_attr_destroy(&attr);
2. 线程优先级的作用范围:
PTHREAD_SCOPE_SYSTEM 线程的优先级的作用范围是整个系统。即线程和系统中所有的线程竞争CPU的时间。
PTHREAD_SCOPE_PROCESS 线程的优先级的作用氛围是当前进程。即线程和该进程中其他线程竞争CPU时间。
pthread_attr_t attr;
struct sched_param param;
param._sched_prority = 10;
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr, SCHED_RR/SCHED_FIFO);
pthread_attr_setschedparam(&attr, ¶m);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM/PTHREAD_SCOPE_PROCESS);
pthread_create(xxx, &attr, xxx, xxx);
pthread_destroy(&attr);
3. 线程和其他线程是否分家:
PTHREAD_CREATE_DETACHED 新线程不能用pthread_join函数来同步,而且在退出时自行释放所占用的资源。
PTHREAD_CREATGE_JOINABLE 默认值。可以使用pthread_detach(pthread_id)改变分家状态。
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
4. 线程栈的大小:
栈是线程的属性,在创建线程的时候,可以指定栈的大小。但是程序运行的过程中,栈的大小不能改变。即线程创建出来,大小就确定。
int stack_size;
pthread_attr_setstacksize(&attr, stack_size);
pthread_attr_getstacksize(&attr, &stack_size);
PTHREAD_STACK_MIN 栈的最小值
以上函数原型:
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
int pthread_attr_getschedparam(pthread_attr_t *attr, struct sched_param *param);
int pthread_attr_setscope(pthread_attr_t *attr, int scope);
int pthread_attr_getscope(pthread_attr_t *attr, int *scope);
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
线程的栈和进程的堆:
栈是系统自动分配,效率比堆高。(管理堆需要做更多的事,而且据说栈通常会放到告诉缓存中)
堆的大小比栈大的多,大小受限于系统有效虚拟内存空间。一个进程的堆的大小不是固定的?是当前申请的堆内存的大小。
全局数据区的大小有系统限制,一般比较大。是固定的?
阅读全文
0 0
- Linux创建线程的属性设置
- Linux 线程设置属性
- linux线程属性设置
- linux线程属性的设置(转)
- Linux--Linux线程创建与线程属性
- linux线程的属性
- linux多线程简单介绍-线程创建、终止、属性设置、多线程同步技术(互斥量、条件变量、信号量)
- Linux线程的创建
- 【转】Linux--Linux线程创建与线程属性
- linux 线程学习(二)属性设置
- Linux线程属性及优先级设置分类
- Linux线程属性及优先级设置
- Linux线程属性及优先级设置
- Linux多线程编程之线程属性设置
- linux创建线程失败的原因是线程栈大小的设置
- Linux 线程属性的使用
- 创建线程可分离状态的属性
- 线程的创建、等待、终止以及属性
- SO_REUSEADDR和SO_REUSEPORT异同
- Python的多线程
- Prim算法求最小生成树
- 解决zabbix在configure时候遇到的问题(Ubuntu)
- 使用autoconf生成Makefile.in文件
- Linux创建线程的属性设置
- 1970年计算的时间转日期
- 简单电路实验
- mysql复合主键如何设定自增长属性
- java用递归方法返回文件下的所有子目录
- mysql的数据类型
- 7816 ATR解析
- 一个好用的askII码对照表
- 一个表的字段不是主键可以做其他表的外键么