1
0
mirror of https://github.com/gluster/glusterfs.git synced 2026-02-06 09:48:44 +01:00
Files
glusterfs/doc/developer-guide/syncop.md
kshithijiyer 2eaf8e846a Fixing formatting errors in markdown files
There are a lot of fromatting error is markdown
files peresent under /doc directiory of the project.
Fixing formatting errors and sending a patch.

Fixes: bz#1718273
Change-Id: I08f938088bbaaafddf634f73616ea0dbfe7aedf3
Signed-off-by: kshithijiyer <kshithij.ki@gmail.com>
2019-06-08 05:45:35 +00:00

2.6 KiB

syncop framework

A coroutines-based, cooperative multi-tasking framework.

Topics

  • Glossary
  • Lifecycle of a synctask
  • Existing usage

Glossary

syncenv

syncenv is an object that provides access to a pool of worker threads. synctasks execute in a syncenv.

synctask

synctask can be informally defined as a pair of function pointers, namely the call and the callback (see syncop.h for more details).

    synctask_fn_t - 'the call'
    synctask_cbk_t - 'the callback'

synctask has two modes of operation,

  1. The calling thread waits for the synctask to complete.
  2. The calling thread schedules the synctask and continues.

synctask guarantees that the callback is called after the call completes.

Lifecycle of a synctask

A synctask could go into the following stages while in execution.

  • CREATED - On calling synctask_create/synctask_new.

  • RUNNABLE - synctask is queued in env->runq.

  • RUNNING - When one of syncenv's worker threads calls synctask_switch_to.

  • WAITING - When a synctask calls synctask_yield.

  • DONE - When a synctask has run to completion.

                              +-------------------------------+
                              |            CREATED            |
                              +-------------------------------+
                                |
                                | synctask_new/synctask_create
                                v
                              +-------------------------------+
                              |    RUNNABLE (in env->runq)    | <+
                              +-------------------------------+  |
                                |                                |
                                | synctask_switch_to             |
                                v                                |
    

+------+ on task completion +-------------------------------+ | | DONE | <-------------------- | RUNNING | | synctask_wake/wake +------+ +-------------------------------+ | | | | synctask_yield/yield | v | +-------------------------------+ | | WAITING (in env->waitq) | -+ +-------------------------------+

Note: A synctask is not guaranteed to run on the same thread throughout its lifetime. Every time a synctask yields, it is possible for it to run on a different thread.