计算创建 n 个线程所花费的时间
calculating time taken to create n threads
我正在尝试创建 1000 个线程,以便我知道创建它们需要多少时间。我使用线程。但是我得到细分错误:11。谷歌搜索它告诉我,这可能是使用太多内存的情况,但我怀疑这是可能的原因。
关于可能是什么原因的任何指示?
法典:
int main(int argc , char *argv[])
{
int *i; // Matti's answer below: ... = (int*)malloc(sizeof(int));
*i = 0;
while( *i < 100)
{
pthread_t thread_id;
puts("Connection accepted");
if( pthread_create( &thread_id , NULL , connection_handler , (void*) &i) < 0)
{
error("could not create thread");
return 1;
}
//pthread_detach(thread_id);
*i = *i + 1;
}
return 0;
}
void *connection_handler(void *i)
{
sleep(1);
return 0;
}
您的问题是您正在取消引用从未初始化的指针:
int *i;
*i = 0;
只是int i;
有什么问题?
谷歌搜索它告诉我,这可能是使用太多内存的情况
在 Ubuntu 15.10 和 g++ v5.2.1 上,
default stack size per thread is 8M bytes
因此,1000 * 8M可能与8G字节一样多。
我的旧戴尔总共只有4G字节的dram。 我认为这可能意味着超过 1/2 的线程堆栈将滚入/滚出交换分区。
不确定您是否想花任何时间衡量或担心它。
顺便说一下,线程上下文切换非常慢,比函数/方法调用慢大约 3 个数量级......明智地使用它们。
在我的旧戴尔 - 使用 c++_11 线程和 std::mutex:
50 nano seconds per std::mutex lock and std::mutex::unlock
~12,000 nano seconds per context switch enforced by std::mutex
我在上面的代码片段中没有看到的是::p thread_exit()。 您可以采取合理的创建和退出措施...也许您还打算在内存不足之前退出每个线程?
更新 - 使用 POSIX 获取线程堆栈大小
void stackShow() // posix thread stack size
{
pthread_attr_t tattr;
int stat = pthread_attr_init (&tattr);
assert(0 == stat);
size_t size;
stat = pthread_attr_getstacksize(&tattr, &size);
assert(0 == stat);
std::cout << " ----------------------------------------------------n"
<< " getstacksize: (" << stat << ") size is " << size
<< "nn";
stat = pthread_attr_destroy(&tattr);
assert(0 == stat);
}
相关文章:
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 在C++中使用线程查找友好号码比单个线程花费更多时间
- 分别测量每个线程上花费的 CPU 时间(C++)
- 如何在c++多线程中匹配处理时间和接收时间
- 给定使用 C++ 或 C,我如何测量在 linux 下进行线程切换需要多长时间?可能吗?
- 将线程锁定很长时间
- ::grpc::ServerReaderWriter 对象在另一个线程中一段时间后无法调用
- 即使长时间等待,C++线程也不会加入
- 锁通过线程保留的时间太长
- 查询时间/周期是针对所有内核/线程的序列化请求还是并行请求?
- 对于同一任务,线程的等待时间在 0 到 30000 微秒之间系统地切换
- 如何测量一组特定线程的 CPU 时间?
- 不完整的多线程光线追踪器花费的时间是预期的两倍
- 如何在多线程应用程序中获得花费的时间
- 在关闭应用程序期间正确关闭线程,该线程可能会运行很长时间的循环
- 使用 4 个和 8 个线程运行时执行的时间相等
- OpenMP 并行编程基于线程数与执行时间的关系
- 为什么我的多线程示例需要与任何一个相同的时间
- 在 C++20 中获取当前日期/时间是否线程安全?
- 如何找到C/C 线程使用的总时间