//physicScheduler -> earlyScheduler -> updateScheduler -> coroutineScheduler -> lateScheduler

        internal static void KillSchedulers()
        {
            if (_multiThreadScheduler != null && multiThreadScheduler.isKilled == false)
            {
                _multiThreadScheduler.Dispose();
            }
            _multiThreadScheduler = null;

            if (_coroutineScheduler != null)
            {
                _coroutineScheduler.Dispose();
            }
            if (_updateScheduler != null)
            {
                _updateScheduler.Dispose();
            }

            _coroutineScheduler = null;
            _updateScheduler    = null;
#if UNITY_5 || UNITY_5_3_OR_NEWER && later
            if (_physicScheduler != null)
            {
                _physicScheduler.Dispose();
            }
            if (_lateScheduler != null)
            {
                _lateScheduler.Dispose();
            }

            _physicScheduler = null;
            _lateScheduler   = null;
            _earlyScheduler  = null;
#endif
        }
        //physicScheduler -> earlyScheduler -> updateScheduler -> coroutineScheduler -> lateScheduler

        internal static void Dispose()
        {
            if (_multiThreadScheduler != null && multiThreadScheduler.isKilled == false)
            {
                _multiThreadScheduler.Dispose();
            }
            _multiThreadScheduler = null;
#if UNITY_5 || UNITY_5_3_OR_NEWER
            _coroutineScheduler?.Dispose();
            _updateScheduler?.Dispose();
            _physicScheduler?.Dispose();
            _lateScheduler?.Dispose();
            _earlyScheduler?.Dispose();

            _coroutineScheduler = null;
            _updateScheduler    = null;
            _physicScheduler    = null;
            _lateScheduler      = null;
            _earlyScheduler     = null;
#endif
        }