Giter Club home page Giter Club logo

workspace's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

workspace's Issues

关于加速比

您好,我看到你的benchmark中提到了加速比,我主要是没感觉到这个指标的意义是在哪呢?
单线程4个task,200s
然后线程池4个task50s,这是很正常的。。

但是当任务达到8、16的时候,总耗时为啥会减少呢?我没有想到原因,能否解释一下啊

线程返回超时问题

workbranch br(2);
auto result = br.submit([](){
    return xx;
});
if(result.wait_for(xx) == std::future::time_out){
    // 请问一下 如过超时,如何杀掉执行当前超时任务的线程。
}else{
    result.get();
}

请问一下 如过超时,如何杀掉执行当前超时任务的线程。

请求一些意见

  1. 在workbranch可以自动调节至低cpu占用的情况下,supervisor还有没有存在的必要?
  2. 若supervisor被删去,那么wsp::workspace还有没有存在的必要?

关于跨平台编译的一些问题

我的编译器是msvc,使用cmake链接你所有头文件重新编译,其中发现了一些问题,其中uint数据类型会报错,size_t数据转换会出现警告;我想说一下,这些数据类型可以换成基本数据类型。

请问线程池可以处理高递归的任务吗

假设原来有类似这样一个会产生很高递归栈的函数:

int fib(int n) {
  if (n <= 1) {
    return 1;
  }
  return fib(n-1) + fib(n-2);
}

把它改写用threadpool后,有类似这样的:

int fib(int n) {
  if (n <= 1) {
    return 1;
  }
  int a = pool.submit(fib(n-1));
  int b = pool.submit(fib(n-2));
  return a + b;
}

但是我有一个困惑是, 在计算fib(n-1)和fib(n-2)时 原来的fib(n)还是挂在线程池里的某一个worker身上没法被销毁, 也不能被销毁. 这样的话递归不了几层, 所有的线程worker都卡住了.

当然如果超出了现有的线程数量可以去新开数量, 但是面对高递归任务时, 开出来大几百个线程worker会很快使得系统性能下降.

请问有什么能保存当前的context但是又不卡住一个线程资源的使用方法吗

建议启用以下cmake功能

编译时打开clang-tidy和-fsanitize=检测选项
安装库到系统路径,用户可以直接include
整合doxygen,自动生成文档,打包和安装文档,之后用户可以通过man命令查看这个库的文档

关于性能分析的咨询

您好,追随您在b站的视频找到这里。

想咨询一下,是否有测试结果,来对比使用 a batch of 的方式,将 task 从写入队列,转移到执行队列中,
比直接写入一个线程安全的队列,然后消费的效果会好。

如果好的话,会好多少?

[bug?] 可能不需要条件变量的互斥锁保护

if (enable_steal_tasks) 的意义

如果能执行到worker中的 if (enable_steal_tasks) 的代码块,意味着waiting=false,但这又意味着全部任务执行完了,这个时候从其他线程的工作队列拿任务的意义何在?不是全部任务已经没了吗?求懂哥解释

关于数据竞争的一些问题

用户的业务逻辑代码可能是千奇百怪、十分复杂的。有可能出现以下两种情况:

两个外部线程调用同一个线程池的waitForTasks()函数,此时会造成数据竞争,程序崩溃。
用户业务逻辑复杂的时候,我认为有可能需要这种用法。

用户向线程池提交了一个函数,这个函数中又去调用线程池的waitForTasks(),此时程序会永远阻塞。
这种用法或许有点儿愚蠢,,但至少您应该在文档中写明waitForTasks()不能提交给线程池执行。
用户代码量大的时候可能难以发现这个错误。线程池应该能检测出这种错误并提示用户。

#include "../hipe.h"

using namespace hipe;

void multithread_wait_task()
{
	DynamicThreadPond pond (8);
	
	pond.submit([](){std::cout << "hello world!" << std::endl;});
	
	std::thread trd { [&pond](){ pond.waitForTasks(); } };
	pond.waitForTasks();
}

void poolthread_wait_task()
{
	DynamicThreadPond pond (8);
	pond.submit([&pond](){pond.waitForTasks(); });
	pond.waitForTasks();
}

int main()
{
	multithread_wait_task();
	poolthread_wait_task();
}

关于任务窃取机制的疑问

github

up你好,我想问一下这里,就是任务窃取时候,这个代码里没有把成功时候的public_task_queue里边的任务转移到t里面呀?只更改了t的task_num,请问是我理解错了么?

动态线程调整相关

线程池支持自动扩容和收缩吗?

设置一个最小线程数量和最大线程数量,请求多的时候自动扩容(但小于最大线程数量),请求少的时候可以释放掉多余资源(但不能过度优化,至少保留最少线程数量)

不知道这个框架支不支持扩展这个功能?

关于submitForReturn函数是否能执行带参数的函数的问题

截屏2023-04-07 00 47 09

如题,可以看出这个函数是不是只实现了 执行不带参数的函数功能啊?因为在调用std::result_of和std::packaged_task的时候,模板里面都没加参数的类型。如果我理解错误的话,up方不方便给一个普通函数的例子啊?

重构问题

请问一下,这个仓库为什么要从hipe重构为workspace,以前的是有什么问题,现在的有什么优势吗?谢谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.