RATIONALE --------- In order to be able to implement different thread pool / connection pool managers, a service to register the necessary thread pool callbacks needs to be implemented. DESCRIPTION ----------- Add plugin service to be able to register thread pool implementations from shared libraries.
The worklog adds two services to the server: one to allow plugins to yield processing to other connections and one to allow the thread scheduler to be set. thd_wait_type ============= This is an enumeration used by the ``thd_wait`` service and give information about the reason for the thread to stall. ======================== ============================================= Symbol Description ======================== ============================================= THD_WAIT_MUTEX The thread is going to wait for a mutex THD_WAIT_DISKIO The thread is going to do some Disk I/O THD_WAIT_ROW_TABLE_LOCK The thread is going to wait for a row lock THD_WAIT_GLOBAL_LOCK The thread is going to wait for a global lock ======================== ============================================= thd_wait ======== This service is used to notify the thread scheduler that the thread is going to go to sleep or stall, or that it is resuming execution. The interface consists of two functions: void thd_wait_begin(MYSQL_THD thd, thd_wait_type wait_type) This function can be called to inform the scheduler that this thread is going to stall for some reason. This will allow a thread scheduler to spawn a second thread to replace the one that goes to sleep. void thd_wait_end(MYSQL_THD thd) This function is called to inform the scheduler that this thread has resumed execution after the wait. my_thread_scheduler =================== This service is used to install an alternative thread scheduler by a plug-in. The thread schedulers should be loaded using the start-up option plugin-load and not using the INSTALL PLUGIN command. If the command is used, odd things might happen. int my_thread_scheduler_set(struct scheduler_functions *scheduler) Set the thread scheduler to use for scheduling and save away the existing one. int my_thread_scheduler_reset() Restore the thread scheduler to the saved thread scheduler.