What does “long-running tasks” mean?

元气小坏坏 提交于 2019-12-30 02:42:31

问题


By default, the CLR runs tasks on pooled threads, which is ideal for short-running compute-bound work. For longer-running and blocking operations, you can prevent use of a pooled thread as follows:

Task task = Task.Factory.StartNew (() => ...,
TaskCreationOptions.LongRunning);

I am reading topic about thread and task. Can you explain to me what are "long[er]-running" and "short-running" tasks?


回答1:


In general thread pooling, you distinguish short-running and long-running threads based on the comparison between their start-up time and run time.

Threads generally take some time to be created and get up to the point where they can start running your code.

The means that if you run a large number of threads where they each take a minute to start but only run for a second (not accurate times but the intent here is simply to show the relationship), the run time of each will be swamped by the time taken to get them going in the first place.

That's one of the reasons for using a thread pool: the threads aren't terminated once their work is done. Instead, they hang around to be reused so that the start-up time isn't incurred again.

So, in that sense, a long running thread is one whose run time is far greater than the time required to start it. In that case, the start-up time is far less important than it is for short running threads.

Conversely, short running threads are ones whose run time is less than or comparable to the start-up time.


For .NET specifically, it's a little different in operation. The thread pooling code will, once it's reached the minimum number of threads, attempt to limit thread creation to one per half-second.

Hence, if you know your thread is going to be long running, you should notify the scheduler so that it can adjust itself accordingly. This will probably mean just creating a new thread rather than grabbing one from the pool, so that the pool can be left to service short-running tasks as intended (no guarantees on that behaviour but it would make sense to do it that way).

However, that doesn't change the meaning of long-running and short-running, all it means is that there's some threshold at which it makes sense to distinguish between the two. For .NET, I would suggest the half-second figure would be a decent choice.



来源:https://stackoverflow.com/questions/25833054/what-does-long-running-tasks-mean

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!