在我的高频交易应用程序,我有几个地方,我从网络接收数据。在大多数情况下,这只是一个只接收和处理数据的线程。以下是这类处理的一部分:
public Reciver(IPAddress mcastGroup, int mcastPort, IPAddress ipSource)
{
thread = new Thread(ReceiveData);
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.ReceiveBuf
我正在做一个项目,在这个项目中我需要使用pthread (C++)来使用多线程。我有一个问题:
当我想要在该线程中进行一些高性能计算而没有太多其他线程中断时,最好的pthread参数配置设置是什么?
目前我使用的是这样的东西:
pthread_t thread;
struct sched_param param;
int sched = SCHED_FIFO;
memset(¶m, 0, sizeof(sched_param));
// Now I set priority to max value (sched_get_priority_max() returns tha
我使用pthread_create()在我的Linux应用程序中创建了一个线程。我想让这个线程以非常低的优先级运行,因为在同一个应用程序中有一些实时线程在运行。下面是线程函数本身中的代码:
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
/* Trying to set lowest priority possible for this thread */
我已按以下顺序设置线程的优先级
当我在程序下面运行时,B运行在A之前,我不理解这个执行,因为我设置B的优先级小于A的优先级。
public class AThread implements Runnable{
public void run(){
System.out.println("In thread A");
}}
public class BThread implements Runnable {
public void run(){
System.out.println("In thread B");
前言:
我有两个线程:一个内核线程和一个用户空间pthread。我假设设置为具有较高rt优先级的pthread的SCHED_RR应该抢占具有SCHED_RR和较低优先级的kthread,而两者运行同一个cpu。
但是我的考试失败了。kthread继续运行,线程没有进展。
注意:我为这个帖子添加了C和C++标记,因为我的示例是一个带有C++和一个带有C。如果有任何标记适合这个帖子,请编辑它并删除C和C++标记。
实验准备:
Ubuntu 18.04。(我认为无论在普通linux还是RT上都是可行的)
线程是使用SCHED_RR和rt优先级50.创建的。
- kthread is just a i
我很难理解setscheduler函数中的sched_priority角色。
我使用的是linux 2.4.X,文档中写道:
Valid priorities for SCHED_OTHER is 0, Valid priorities for SCHED_RR\FIFO are 1...MAX_USER_RT_PRIO-1
但是,我记得rt进程的优先级是0-99,SCHED_OTHER的优先级是100-139,所以...我错过了什么?struct sched_param中的sched_priority指的是什么?