Difference between revisions of "Micro-threading"

From Free Pascal wiki
Jump to navigationJump to search
 
(10 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
==Introduction==
 
==Introduction==
There are some situations where applications need to execute lots of asynchronous concurrent operations. OS-level threads could be used for this purpose, but an application can create only a limited count of threads. As for CPU utilization there is no significant performance gain if more threads are created than physical cores available on a CPU. In fact threads could be used for parallel processing on a multicore CPU and for writing more readable code. OS-level threads should be used mainly used for parallelism and better CPU utilization. If a programmer needs to write code which will be called asynchronously, then OS-level threads will be rather expensive in perspective of system resources.
+
There are some situations where applications need to execute lots of asynchronous concurrent operations. OS-level threads could be used for this purpose, but an application can create only a limited count of threads. As for CPU utilization there is no significant performance gain if more threads are created than physical cores available on a CPU. In fact threads could be used for parallel processing on a multi-core CPU and for writing more readable code. OS-level threads should be mainly used for parallelism and better CPU utilization. If a programmer needs to write code which will be called asynchronously, then OS-level threads will be rather expensive in perspective of system resources.
  
 
===CPU context switching methods===
 
===CPU context switching methods===
Line 16: Line 16:
 
* Support for view list of all microthreads
 
* Support for view list of all microthreads
  
==Implementation==
+
==Implementations==
* [http://svn.zdechov.net/svn/PascalClassLibrary/MicroThreading/ MicroThreading] - Lazarus package, functional yet not finished, not multi-platform, need patching FPC
+
* [http://svn.zdechov.net/PascalClassLibrary/MicroThreading/ MicroThreading] - Lazarus package, functional yet not finished, not multi-platform, needs patching the Free Pascal
 +
* [[STAX]] - Single Threaded Asynchronous EXecution framework (STAX for short) enables async/await style co-routines for Free Pascal
  
 
==External links==
 
==External links==

Latest revision as of 18:51, 31 August 2021

Introduction

There are some situations where applications need to execute lots of asynchronous concurrent operations. OS-level threads could be used for this purpose, but an application can create only a limited count of threads. As for CPU utilization there is no significant performance gain if more threads are created than physical cores available on a CPU. In fact threads could be used for parallel processing on a multi-core CPU and for writing more readable code. OS-level threads should be mainly used for parallelism and better CPU utilization. If a programmer needs to write code which will be called asynchronously, then OS-level threads will be rather expensive in perspective of system resources.

CPU context switching methods

  • Cooperative (use of explicit Yield call)
  • Preemptive (periodic timer based)
  • Combined

Objectives

  • Unlimited number of instances (limited by available memory)
  • Fast switching, creation, destruction
  • Automatic thread pool management by physical CPU core count
  • Ability to run in main loop only (without TThread instances)
  • Provide own synchronization tools (Yield, Sleep, CriticalSection, Semaphore, Mutex, WaitForMultipleObjects, Queues, Synchronize, ...)
  • Priority control
  • Support for view list of all microthreads

Implementations

  • MicroThreading - Lazarus package, functional yet not finished, not multi-platform, needs patching the Free Pascal
  • STAX - Single Threaded Asynchronous EXecution framework (STAX for short) enables async/await style co-routines for Free Pascal

External links