Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/llfio.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html')
-rw-r--r--classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html289
1 files changed, 289 insertions, 0 deletions
diff --git a/classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html b/classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html
new file mode 100644
index 00000000..a6553909
--- /dev/null
+++ b/classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html
@@ -0,0 +1,289 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.17"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>LLFIO: llfio_v2_xxx::dynamic_thread_pool_group::io_aware_work_item Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">LLFIO
+ &#160;<span id="projectnumber">v2.00 late beta</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.17 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(document).ready(function(){initNavTree('classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html',''); initResizable(); });
+/* @license-end */
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">llfio_v2_xxx::dynamic_thread_pool_group::io_aware_work_item Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>A work item which paces when it next executes according to i/o congestion.
+ <a href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html#details">More...</a></p>
+
+<p><code>#include &quot;dynamic_thread_pool_group.hpp&quot;</code></p>
+<div class="dynheader">
+Inheritance diagram for llfio_v2_xxx::dynamic_thread_pool_group::io_aware_work_item:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.png" usemap="#llfio_5Fv2_5Fxxx::dynamic_5Fthread_5Fpool_5Fgroup::io_5Faware_5Fwork_5Fitem_map" alt=""/>
+ <map id="llfio_5Fv2_5Fxxx::dynamic_5Fthread_5Fpool_5Fgroup::io_5Faware_5Fwork_5Fitem_map" name="llfio_5Fv2_5Fxxx::dynamic_5Fthread_5Fpool_5Fgroup::io_5Faware_5Fwork_5Fitem_map">
+<area href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1work__item.html" title="An individual item of work within the work group." alt="llfio_v2_xxx::dynamic_thread_pool_group::work_item" shape="rect" coords="0,0,366,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item_1_1io__handle__awareness.html">io_handle_awareness</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Information about an i/o handle this work item will use. <a href="structllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item_1_1io__handle__awareness.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a9df0ab84dd9f69b40b9117a79c8eca78"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html#a9df0ab84dd9f69b40b9117a79c8eca78">io_aware_work_item</a> (span&lt; <a class="el" href="structllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item_1_1io__handle__awareness.html">io_handle_awareness</a> &gt; hs)</td></tr>
+<tr class="memdesc:a9df0ab84dd9f69b40b9117a79c8eca78"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a work item aware of i/o done to the handles in <code>hs</code>. <a href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html#a9df0ab84dd9f69b40b9117a79c8eca78">More...</a><br /></td></tr>
+<tr class="separator:a9df0ab84dd9f69b40b9117a79c8eca78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa090c92e4adf339d8092465934b82f03"><td class="memItemLeft" align="right" valign="top"><a id="aa090c92e4adf339d8092465934b82f03"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>io_aware_work_item</b> (<a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html">io_aware_work_item</a> &amp;&amp;o) noexcept</td></tr>
+<tr class="separator:aa090c92e4adf339d8092465934b82f03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d45637f8c603e9f132f99d7c539ee22"><td class="memItemLeft" align="right" valign="top"><a id="a0d45637f8c603e9f132f99d7c539ee22"></a>
+span&lt; <a class="el" href="structllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item_1_1io__handle__awareness.html">io_handle_awareness</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html#a0d45637f8c603e9f132f99d7c539ee22">handles</a> () const noexcept</td></tr>
+<tr class="memdesc:a0d45637f8c603e9f132f99d7c539ee22"><td class="mdescLeft">&#160;</td><td class="mdescRight">The handles originally registered during construction. <br /></td></tr>
+<tr class="separator:a0d45637f8c603e9f132f99d7c539ee22"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab92cec481e76ed36075100c0bf9f8821"><td class="memItemLeft" align="right" valign="top"><a id="ab92cec481e76ed36075100c0bf9f8821"></a>
+virtual intptr_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html#ab92cec481e76ed36075100c0bf9f8821">io_aware_next</a> (<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a> &amp;d) noexcept=0</td></tr>
+<tr class="memdesc:ab92cec481e76ed36075100c0bf9f8821"><td class="mdescLeft">&#160;</td><td class="mdescRight">As for <code>work_item::next()</code>, but deadline may be extended to reduce i/o congestion on the hardware devices to which the handles refer. <br /></td></tr>
+<tr class="separator:ab92cec481e76ed36075100c0bf9f8821"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee890b7a94a8d7a24e9b55aef8177c49"><td class="memItemLeft" align="right" valign="top"><a id="aee890b7a94a8d7a24e9b55aef8177c49"></a>
+<a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group.html">dynamic_thread_pool_group</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1work__item.html#aee890b7a94a8d7a24e9b55aef8177c49">parent</a> () const noexcept</td></tr>
+<tr class="memdesc:aee890b7a94a8d7a24e9b55aef8177c49"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the parent work group between successful submission and just before <code>group_complete()</code>. <br /></td></tr>
+<tr class="separator:aee890b7a94a8d7a24e9b55aef8177c49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68e317002adf480e0a4c076410e35e8e"><td class="memItemLeft" align="right" valign="top">virtual result&lt; void &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1work__item.html#a68e317002adf480e0a4c076410e35e8e">operator()</a> (intptr_t work) noexcept=0</td></tr>
+<tr class="separator:a68e317002adf480e0a4c076410e35e8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8d6ba54f52e216edd37474f19731fd8"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1work__item.html#ae8d6ba54f52e216edd37474f19731fd8">group_complete</a> (const result&lt; void &gt; &amp;cancelled) noexcept</td></tr>
+<tr class="separator:ae8d6ba54f52e216edd37474f19731fd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a5860206701c43b7035475dc3f62a23ef"><td class="memItemLeft" align="right" valign="top"><a id="a5860206701c43b7035475dc3f62a23ef"></a>
+float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html#a5860206701c43b7035475dc3f62a23ef">max_iosbusytime</a> {0.95f}</td></tr>
+<tr class="memdesc:a5860206701c43b7035475dc3f62a23ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum i/o busyness above which throttling is to begin. <br /></td></tr>
+<tr class="separator:a5860206701c43b7035475dc3f62a23ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81540923522973756560e20c44a0e948"><td class="memItemLeft" align="right" valign="top"><a id="a81540923522973756560e20c44a0e948"></a>
+uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html#a81540923522973756560e20c44a0e948">min_iosinprogress</a> {16}</td></tr>
+<tr class="memdesc:a81540923522973756560e20c44a0e948"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum i/o in progress to target if <code>iosbusytime</code> exceeded. The default of 16 suits SSDs, you want around 4 for spinning rust or NV-RAM. <br /></td></tr>
+<tr class="separator:a81540923522973756560e20c44a0e948"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a240b9e4d3d0ee510c46347e735185688"><td class="memItemLeft" align="right" valign="top"><a id="a240b9e4d3d0ee510c46347e735185688"></a>
+uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html#a240b9e4d3d0ee510c46347e735185688">max_iosinprogress</a> {32}</td></tr>
+<tr class="memdesc:a240b9e4d3d0ee510c46347e735185688"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum i/o in progress to target if <code>iosbusytime</code> exceeded. The default of 32 suits SSDs, you want around 8 for spinning rust or NV-RAM. <br /></td></tr>
+<tr class="separator:a240b9e4d3d0ee510c46347e735185688"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:aa6641deb837cc77540b1a9bdf41afa6f"><td class="memItemLeft" align="right" valign="top"><a id="aa6641deb837cc77540b1a9bdf41afa6f"></a>
+constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><b>_has_timer_set_relative</b> () const noexcept</td></tr>
+<tr class="separator:aa6641deb837cc77540b1a9bdf41afa6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c2850bf3778d32c335eace1f05ea3b7"><td class="memItemLeft" align="right" valign="top"><a id="a1c2850bf3778d32c335eace1f05ea3b7"></a>
+constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><b>_has_timer_set_absolute</b> () const noexcept</td></tr>
+<tr class="separator:a1c2850bf3778d32c335eace1f05ea3b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c49153ff193f7b3d948eec37b5509f7"><td class="memItemLeft" align="right" valign="top"><a id="a2c49153ff193f7b3d948eec37b5509f7"></a>
+constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><b>_has_timer_set</b> () const noexcept</td></tr>
+<tr class="separator:a2c49153ff193f7b3d948eec37b5509f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>A work item which paces when it next executes according to i/o congestion. </p>
+<p>Currently there is only a working implementation of this for the Microsoft Windows and Linux platforms, due to lack of working <code>statfs_t::f_iosinprogress</code> on other platforms. If retrieving that for a seekable handle does not work, the constructor throws an exception.</p>
+<p>For seekable handles, currently <code>reads</code>, <code>writes</code> and <code>barriers</code> are ignored. We simply retrieve, periodically, <code>statfs_t::f_iosinprogress</code> and <code>statfs_t::f_iosbusytime</code> for the storage devices backing the seekable handle. If the recent averaged i/o wait time exceeds <code>max_iosbusytime</code> and the i/o in progress &gt; <code>max_iosinprogress</code>, <code>next()</code> will start setting the default deadline passed to <code>io_aware_next()</code>. Thereafter, every 1/10th of a second, if <code>statfs_t::f_iosinprogress</code> is above <code>max_iosinprogress</code>, it will increase the deadline by 1/16th, whereas if it is below <code>min_iosinprogress</code>, it will decrease the deadline by 1/16th. The default deadline chosen is always the worst of all the storage devices of all the handles. This will reduce concurrency within the kernel thread pool in order to reduce congestion on the storage devices. If at any point <code>statfs_t::f_iosbusytime</code> drops below <code>max_iosbusytime</code> as averaged across one second, and <code>statfs_t::f_iosinprogress</code> drops below <code>min_iosinprogress</code>, the additional throttling is completely removed. <code>io_aware_next()</code> can ignore the default deadline passed into it, and can set any other deadline.</p>
+<p>For non-seekable handles, the handle must have an i/o multiplexer set upon it, and on Microsoft Windows, that i/o multiplexer must be utilising the IOCP instance of the global Win32 thread pool. For each <code>reads</code>, <code>writes</code> and <code>barriers</code> which is non-zero, a corresponding zero length i/o is constructed and initiated. When the i/o completes, and all readable handles in the work item's set have data waiting to be read, and all writable handles in the work item's set have space to allow writes, only then is the work item invoked with the next piece of work.</p>
+<dl class="section note"><dt>Note</dt><dd>Non-seekable handle support is not implemented yet. </dd></dl>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a9df0ab84dd9f69b40b9117a79c8eca78"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9df0ab84dd9f69b40b9117a79c8eca78">&#9670;&nbsp;</a></span>io_aware_work_item()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">llfio_v2_xxx::dynamic_thread_pool_group::io_aware_work_item::io_aware_work_item </td>
+ <td>(</td>
+ <td class="paramtype">span&lt; <a class="el" href="structllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item_1_1io__handle__awareness.html">io_handle_awareness</a> &gt;&#160;</td>
+ <td class="paramname"><em>hs</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructs a work item aware of i/o done to the handles in <code>hs</code>. </p>
+<p>Note that the <code>reads</code>, <code>writes</code> and <code>barriers</code> are normalised to proportions out of <code>1.0</code> by this constructor, so if for example you had <code>reads/writes/barriers = 200/100/0</code>, after normalisation those become <code>0.66/0.33/0.0</code> such that the total is <code>1.0</code>. If <code>reads/writes/barriers = 0/0/0</code> on entry, they are replaced with <code>0.5/0.5/0.0</code>.</p>
+<p>Note that normalisation is across <em>all</em> i/o handles in the set, so three handles each with <code>reads/writes/barriers = 200/100/0</code> on entry would have <code>0.22/0.11/0.0</code> each after construction. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="ae8d6ba54f52e216edd37474f19731fd8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae8d6ba54f52e216edd37474f19731fd8">&#9670;&nbsp;</a></span>group_complete()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void llfio_v2_xxx::dynamic_thread_pool_group::work_item::group_complete </td>
+ <td>(</td>
+ <td class="paramtype">const result&lt; void &gt; &amp;&#160;</td>
+ <td class="paramname"><em>cancelled</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span><span class="mlabel">noexcept</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Invoked by the i/o thread pool when all work in this thread pool group is complete.</p>
+<p><code>cancelled</code> indicates if this is an abnormal completion. If its error compares equal to <code>errc::operation_cancelled</code>, then <code>stop()</code> was called.</p>
+<p>Just before this is called for all work items submitted, the group becomes reset to fresh, and <code>parent()</code> becomes null. You can resubmit this work item, but do not submit other work items until their <code>group_complete()</code> has been invoked.</p>
+<p>Note that this function is called from multiple kernel threads.</p>
+<p><code>dynamic_thread_pool_group::current_work_item()</code> may have any value during this call. </p>
+<div class="fragment"><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;{ (void) cancelled; }</div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a68e317002adf480e0a4c076410e35e8e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68e317002adf480e0a4c076410e35e8e">&#9670;&nbsp;</a></span>operator()()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual result&lt;void&gt; llfio_v2_xxx::dynamic_thread_pool_group::work_item::operator() </td>
+ <td>(</td>
+ <td class="paramtype">intptr_t&#160;</td>
+ <td class="paramname"><em>work</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Invoked by the i/o thread pool to perform the next item of work.</p>
+<dl class="section return"><dt>Returns</dt><dd>Any failure causes all remaining work in this group to be cancelled as soon as possible. </dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">work</td><td>The value returned by <code>next()</code>.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Note that this function is called from multiple kernel threads, and may not be the kernel thread from which <code>next()</code> was called.</p>
+<p><code>dynamic_thread_pool_group::current_work_item()</code> will always be <code>this</code> during this call. </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>include/llfio/v2.0/dynamic_thread_pool_group.hpp</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="namespacellfio__v2__xxx.html">llfio_v2_xxx</a></li><li class="navelem"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group.html">dynamic_thread_pool_group</a></li><li class="navelem"><a class="el" href="classllfio__v2__xxx_1_1dynamic__thread__pool__group_1_1io__aware__work__item.html">io_aware_work_item</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
+ </ul>
+</div>
+</body>
+</html>