Multithreading 对于多线程应用程序中使用的一段代码,从O(n^2)复杂度更改为O(n)复杂度或更低
我有一段代码如下。我想为此提高时间复杂度。 这是一个线程,我最多可以有2000个线程同时执行这个函数 最重要的是,我等待从轮询集中准备好的文件描述符。MAX_RTP_会话也非常庞大(价值5000或更多)。所以这是一个很大的for循环,因此我可以看到性能受到影响。[当MAX_RTP_会话的值降低到仅500时,我可以看到性能的巨大改进] 但我必须使用2000个线程和5000个会话。我希望我能找到一种方法将时间复杂度从o(n^2)更改为至少o(n)或更好。任何想法都非常感谢Multithreading 对于多线程应用程序中使用的一段代码,从O(n^2)复杂度更改为O(n)复杂度或更低,multithreading,algorithm,Multithreading,Algorithm,我有一段代码如下。我想为此提高时间复杂度。 这是一个线程,我最多可以有2000个线程同时执行这个函数 最重要的是,我等待从轮询集中准备好的文件描述符。MAX_RTP_会话也非常庞大(价值5000或更多)。所以这是一个很大的for循环,因此我可以看到性能受到影响。[当MAX_RTP_会话的值降低到仅500时,我可以看到性能的巨大改进] 但我必须使用2000个线程和5000个会话。我希望我能找到一种方法将时间复杂度从o(n^2)更改为至少o(n)或更好。任何想法都非常感谢 //.. retval=e
//..
retval=epoll_wait(epfd, pollset, EPOLL_MAX_EVENTS, mSecTimeout)
//..
sem_wait(&sem_sessions);
for(i = 0; i< retVal; i++) {
for (j=0; j < MAX_RTP_SESSIONS; j++) {
if ((g_rtp_sessions[j].destroy==FALSE) &&
(g_rtp_sessions[j].used!=FALSE) &&
(g_rtp_sessions[j].p_rtp->rtp_socket->fd == pollset[i].data.fd))
{
if (0 < rtp_recv_data(....)) {
rtp_update(...)
}
}
}
}
sem_post(&sem_sessions);
//..
/。。
retval=epoll\u wait(epfd、pollset、epoll\u MAX\u事件、mSecTimeout)
//..
sem_等待(和sem_会话);
对于(i=0;irtp_socket->fd==pollset[i].data.fd)
{
如果(0
Sortpollset
,然后您可以对其进行二进制搜索,这将导致一个O(n logn)算法。嗨,塞巴斯蒂安,谢谢您的回复。我可以对g_rtp_会话进行排序和二进制搜索,而不是对pollset进行排序,对吗?由于retVal返回的值仅小于100,而MAX_RTP_会话可以是5000甚至10000。