您的位置:首页 > Web前端

What is the difference between task and thread?

2016-04-20 10:29 633 查看
http://stackoverflow.com/questions/4130194/what-is-the-difference-between-task-and-thread

回答一:

A task is something you want done.

A thread is one of the many possible workers which performs that task.

In .NET 4.0 terms, a Task represents an asynchronous operation. Thread(s) are used to complete that operation by breaking the work up into chunks and assigning to separate threads.

回答2:

In computer science terms, a
Task
is a future or a promise. (Some people use those two terms synomymously, some use them differently, nobody can agree on a precise definition.) Basically, a
Task<T>
"promises" to return you a
T
, but not right now honey, I'm kinda busy, why don't you come back later?

A
Thread
is a way of fulfilling that promise. But not every
Task
needs a brand-new
Thread
. (In fact, creating a thread is often undesirable, because doing so is much more expensive than re-using an existing thread from the threadpool. More on that in a moment.) If the value you are waiting for comes from the filesystem or a database or the network, then there is no need for a thread to sit around and wait for the data when it can be servicing other requests. Instead, the
Task
might register a callback to receive the value(s) when they're ready.

In particular, the
Task
does not say why it is that it takes such a long time to return the value. It mightbe that it takes a long time to compute, or it might that it takes a long time to fetch. Only in the former case would you use a
Thread
to run a
Task
. (In .NET, threads are freaking expensive, so you generally want to avoid them as much as possible and really only use them if you want to run multiple heavy computations on multiple CPUs. For example, in Windows, a thread weighs 12 KiByte (I think), in Linux, a thread weighs as little as 4 KiByte, in Erlang/BEAM even just 400 Byte. In .NET, it's 1 MiByte!)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: