question about Sequenced task runner

169 views
Skip to first unread message

18楼梦想改造家

unread,
Sep 23, 2023, 11:57:53 PM9/23/23
to scheduler-dev
Hey, I read [this document](https://chromium.googlesource.com/chromium/src/+/main/docs/threading_and_tasks.md) to learn chromium schedule.

And something makes me confusion. like [the document describe](https://chromium.googlesource.com/chromium/src/+/main/docs/threading_and_tasks.md#core-concepts).

>   Sequenced task runner: A task runner which guarantees that tasks posted to it will run sequentially, in posted order. Each such task is guaranteed to see the side-effects of the task preceding it. Tasks posted to a sequenced task runner are typically processed by a single thread (virtual or physical). In Chrome this is base::SequencedTaskRunner which is-a base::TaskRunner.

In the [posting-to-a-new-sequence section](https://chromium.googlesource.com/chromium/src/+/main/docs/threading_and_tasks.md#posting-to-a-new-sequence), we have this demo:

```
scoped_refptr<SequencedTaskRunner> sequenced_task_runner =
    base::ThreadPool::CreateSequencedTaskRunner(...);

// TaskB runs after TaskA completes.
sequenced_task_runner->PostTask(FROM_HERE, base::BindOnce(&TaskA));
sequenced_task_runner->PostTask(FROM_HERE, base::BindOnce(&TaskB));
```

Here we say `|TaskB runs after TaskA completes|`, I could understand this fully.

But when I read the [code database](https://source.chromium.org/chromium/chromium/src/+/main:base/task/sequenced_task_runner.h;l=99?q=base::SequencedTaskRunner&ss=chromium%2Fchromium%2Fsrc):

```
//   - Given two tasks T2 and T1, T2 will start after T1 starts if:
//
//       * T2 is posted after T1; and
//       * T2 has equal or higher delay than T1; and
//       * T2 is non-nestable or T1 is nestable.
```

Now, things make me a little confusion, If I have this code:

```
scoped_refptr<SequencedTaskRunner> sequenced_task_runner =
    base::ThreadPool::CreateSequencedTaskRunner(...);

// TaskB runs after TaskA completes.
sequenced_task_runner->PostTask(FROM_HERE, base::BindOnce(&TaskA), base::Hours(10));
sequenced_task_runner->PostTask(FROM_HERE, base::BindOnce(&TaskB), base::Hours(1));
```

Does TaskA still run before TaskB? Thx!
Reply all
Reply to author
Forward
0 new messages