3.1.2.2.12. ThreadSettings
这个结构体是其他QoS(服务质量)策略的一部分,允许控制为创建的线程设置一些操作系统的选项。默认值将保留在创建线程时的操作系统默认设置。更改这些值可能需要特殊权限。
数据成员名称
数据成员名称 | 类型 | 默认值 |
---|---|---|
scheduling_policy | int32_t | -1 |
priority | int32_t | -2^31 |
affinity | uint32_t | 0 |
stack_size | int32_t | -1 |
scheduling_policy: 配置用于线程的调度策略。该值特定于平台,并按原样用于配置特定平台的线程。在Windows平台上,该值会被忽略。
priority: 配置线程的优先级。该值特定于平台,并按原样用于配置特定平台的线程。
affinity: 在某些系统(如Windows、Linux)上,这是一个位掩码,用于将线程绑定到每个核心。对于MacOS,这设置了线程的亲和性标签,操作系统尝试在具有相同亲和性的线程之间共享L2缓存。该值特定于平台,并按原样用于配置特定平台的线程。
stack_size: 配置线程的栈大小(以字节为单位)。该值特定于平台,并按原样用于配置特定平台的线程。
在基于端口传输描述符中的接收线程也可以通过将每个线程特定配置与其对应的端口号关联来进行配置。
示例
以下示例说明了一个线程设置配置:
// 此示例使用DomainParticipantQos中的特定线程,但它也可以应用于FastDDS中大多数由DomainParticipantFactoryQos、DomainParticipantQos或DataSharingQosPolicy使用的线程。
// 每个线程都有自己的getter和setter函数。请参阅Fast DDS文档以获取更多详细信息。
DomainParticipantQos participant_qos;
participant_qos.timed_events_thread().scheduling_policy = 2;
participant_qos.timed_events_thread().priority = 10;
participant_qos.timed_events_thread().affinity = 4;
participant_qos.timed_events_thread().stack_size = 2000;
// 在创建相应实体时使用修改后的QoS
participant_ = factory_->create_participant(domain, participant_qos);
后续示例展示了接收线程设置的配置:
// 实现一个自定义类,从PortBasedTransportDescriptor派生,以设置接收线程配置
CustomPortBasedTransportDescriptor descriptor;
PortBasedTransportDescriptor::ReceptionThreadsConfigMap reception_threads_config;
reception_threads_config[20000].scheduling_policy = 1;
reception_threads_config[20000].priority = 30;
reception_threads_config[20000].affinity = 2;
reception_threads_config[20000].stack_size = 1024;
reception_threads_config[20001].scheduling_policy = 2;
reception_threads_config[20001].priority = 10;
reception_threads_config[20001].affinity = 6;
reception_threads_config[20001].stack_size = 4096;
// 使用setter设置接收线程配置
descriptor.reception_threads(reception_threads_config);
以上代码示例展示了如何根据具体需求修改并应用不同接收线程序列参数,包括调度策略、优先级、亲和性以及栈大小等设置信息。这有助于优化多核处理器上的性能表现。
内容由零声教学AI助手提供,问题来源于学员提问