From 40bedbe7778a6979563341790b202e3ac5f6a566 Mon Sep 17 00:00:00 2001 From: johnwdjiang Date: Thu, 22 Oct 2020 20:59:26 +0800 Subject: [PATCH] finish item38 --- 7.The Concurrency API/item38.md | 96 ++++++++++++++++++ .../media/image-20201022194524454.png | Bin 0 -> 18970 bytes .../media/image-20201022201806802.png | Bin 0 -> 25269 bytes README.md | 2 +- 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 7.The Concurrency API/item38.md create mode 100644 7.The Concurrency API/media/image-20201022194524454.png create mode 100644 7.The Concurrency API/media/image-20201022201806802.png diff --git a/7.The Concurrency API/item38.md b/7.The Concurrency API/item38.md new file mode 100644 index 0000000..4ea2d2e --- /dev/null +++ b/7.The Concurrency API/item38.md @@ -0,0 +1,96 @@ +## Item 38:Be aware of varying thread handle destructor behavior. + +## Item 38:关注不同线程句柄的析构行为 + +Item 37中说明了joinable的`std::thread`对应于可执行的系统线程。non-defered任务的`future`(参见Item 36)与系统线程有相似的关系。因此,可以将`std::thread`对象和`future`对象都视作系统线程的句柄。 + +从这个角度来说,有趣的是`std::thread`和`futures`在析构时有相当不同的行为。在Item 37中说明,joinable的`std::thread`析构会终止你的程序,因为两个其他的替代选择--隐式`join`或者隐式`detach`都是更加糟糕的。但是,`futures`的析构表现有时就像执行了隐式`join,`有时又是隐式执行了`detach`,有时又没有执行这两个选择。永远不会造成程序终止。这个线程句柄多种表现值得研究一下。 + +我们可以观察到实际上`future`是通信信道的一端(被调用者通过该信道将结果发送给调用者)。被调用者(通常是异步执行)将计算结果写入通信信道中(通过`std::promise`对象),调用者使用`future`读取结果。你可以想象成下面的图示,虚线表示信息的流动方向: + +![image-20201022194524454](media/image-20201022194524454.png) + +但是被调用者的结果存储在哪里?被调用者会在调用者`get`相关的`future`之前执行完成,所以结果不能存储在被调用者的`std::promise`。这个对象是局部的,当被调用者执行结束后,会被销毁。 + +结果同样不能存储在调用者的`future`,因为`std::future`可能会被用来创建`std::shared_future`(这会将被调用者的结果所有权从`std::future`转移给`std::shared_future`),而`std::shared_future`在`std::future`被销毁之后被复制很多次。鉴于不是所有的结果都可以被拷贝(有些只能移动)和结果的声明周期与最后一个引用它的`future`一样长,哪个才是被调用者用来存储结果的?这两个问题。 + +因为与被调用者关联的对象和调用者关联的对象都不适合存储这个结果,必须存储在两者之外的位置。此位置称为共享状态(*shared state*)。共享状态通常是基于堆的对象,但是标准并未指定其类型、接口和实现。标准库的作者可以通过任何他们喜欢的方式来实现共享状态。 + +我们可以想象调用者,被调用者,共享状态之间关系如下图,虚线还是表示信息的流控方向: + +![image-20201022201806802](media/image-20201022201806802.png) + +共享状态的存在非常重要,因为`future`的析构行为--这个Item的话题---取决于关联`future`的共享状态。 + +- Non-defered任务(启动参数为`std::launch::async`)的最后一个关联共享状态的`future`析构函数会在任务完成之前block住。本质上,这种`future`的析构对执行异步任务的线程做了隐式的`join`。 +- `future`其他对象的析构简单的销毁。对于异步执行的任务,就像对底层的线程执行`detach`。对于defered任务的最后一种`future`,意味着这个defered任务永远不会执行了。 + +这些规则听起来好复杂。我们真正要处理的是一个简单的“正常”行为以及一个单独的例外。正常行为是`future`析构函数销毁`future`。那意味着不`join`也不`detach`,只销毁`future`的数据成员(当然,还做了另一件事,就是对于多引用的共享状态引用计数减一。) + +正常行为的例外情况仅在同时满足下列所有情况下才会执行: + +- 关联`future`的共享状态是被调用了`std::async`创建的 +- 任务的启动策略是`std::launch::async`(参见Item 36),原因是运行时系统选择了该策略,或者在对`std::async`的调用中指定了该策略。 +- `future`是关联共享状态的最后一个引用。对于`std::future`,情况总是如此,对于`std::shared_future`,如果还有其他的`std::shared_future`引用相同的共享状态没有销毁,就不是。 + +只有当上面的三个条件都满足时,`future`的析构函数才会表现“异常”行为,就是在异步任务执行完之前block住。实际上,这相当于运行`std::async`创建的任务的线程隐式`join`。 + +通常会听到将这种异常的析构函数行为称为"Futures from std::async block in their destructors"。作为近似描述没有问题,但是忽略了原因和细节,现在你已经知道了其中三味。 + +你可能想要了解更加深入。比如“为什么会有这样的规则”(译者注:这里的问题是意译,原文重复了问题本身),这很合理。据我所知,标准委员会希望避免这个问题与隐式`detach`(参见Item 37)相关联,但是不想采取强制程序终止这种激进的方案(因此搞了`join`,同样参见Item 37),所以妥协使用隐式`join`。这个决定并非没有争议,并且认真讨论过在C++14中放弃这种行为。最后,决定先不改变,所以C++11和C++14中这里的行为是一致的。 + +没有API来提供`future`是否指向`std::async`调用产生的共享状态,因此给定一个`std::future`对象,无法判断是不是会在析构函数block等待异步任务的完成。这就产生了有意思的事情: + +```cpp +// this container might block in its dtor, because one or more contained futures could refer to a shared state for a non-deferred task launched via std::async +std::vector> futs; // see Item 39 for info on std::future +class Widget // Widget objects might block in their dtors +{ +public: + ... +private: + std::shared_future fut; +}; +``` + +当然,如果你有办法知道给定的`future`不满足上面条件的任意一条,你就可以确定析构函数不会执行“异常”行为。比如,只有通过`std::async`创建的共享状态才有资格执行“异常”行为,但是有其他创建共享状态的方式。一种是使用`std::packaged_task`,一个`std::packaged_task`对象准备一个函数(或者其他可调用对象)来异步执行,然后将其结果放入共享状态中。然后通过`std::packaged_task`的`get_future`函数获取有关该共享状态的信息: + +```cpp +int calcValue(); // func to run +std::packaged_task pt(calcValue); // wrap calcValue so it can run asynchrously +auto fut = pt.get_future(); // get future for pt +``` + +此时,我们知道`future`没有关联`std::async`创建的共享状态,所以析构函数肯定正常方式执行。 + +一旦被创建,`std::packaged_task`类型的pt可能会在线程上执行。(译者注:后面有些啰嗦的话这里不完整翻译。。大意就是可以再次使用`std::async`来执行,但是那就不用`std::packaged_task`了) + +`std::packaged_task`不能拷贝,所以当`pt`被传递给`std::thread`时是右值传递(通过move,参见Item 23): + +```cpp +std::thread t(std::move(pt)); // run pt on t +``` + +这个例子是你对于`future`的析构函数的正常行为有一些了解,但是将这些语句放在一个作用域的语句块里更容易: + +```cpp +{ // begin block + std::packaged_task pt(calcValue); + auto fut = pt.get_future(); + std::thread t(std::move(pt)); + ... +} // end block +``` + +此处最有趣的代码是在创建`std::thread`对象t之后的"..."。"..."有三种可能性: + +- 对t不做什么。这种情况,t会在语句块结束joinable,这会使得程序终止(参见Item 37) +- 对t调用`join`。这种情况,不需要fut的析构函数block,因为`join`被显式调用了 +- 对t调用`detach`。这种情况,不需要在fut的析构函数执行`detach`,因为显式调用了 + +换句话说,当你有一个关联了`std::packaged_task`创建的共享状态的`future`时,不需要采取特殊的销毁策略,通常你会代码中做这些。 + +### 需要记住的事 + +- `future`的正常析构行为就是销毁future本身的成员数据 +- 最后一个引用`std::async`创建共享状态的`future`析构函数会在任务结束前block \ No newline at end of file diff --git a/7.The Concurrency API/media/image-20201022194524454.png b/7.The Concurrency API/media/image-20201022194524454.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ce8be1c9b45a8e940c831c5b11084369549118 GIT binary patch literal 18970 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 wJKUd9