Сборщик "мусора".NET - каков его приоритет потока?

>>> names = ['Id', 'Datetime', 'Drug']
>>> df = pd.read_csv('drugs.csv', names=names, parse_dates=['Datetime'])
>>> df

    Id      Datetime                Drug
0   66531   2012-12-18 08:31:00     acetaminophen-HYDROcodone
1   66531   2012-12-18 17:44:00     acetaminophen-HYDROcodone
2   66531   2013-02-18 22:36:00     morphine
3   66531   2013-02-19 05:07:00     morphine
4   66531   2013-02-19 10:13:00     morphine
5   66531   2013-02-19 15:27:00     morphine
6   66531   2013-02-19 17:33:00     oxyCODONE
7   66531   2013-02-19 19:20:00     acetaminophen-HYDROcodone
8   66531   2013-02-19 20:54:00     methadone
9   66531   2013-02-20 06:46:00     methadone
10  66531   2013-02-20 13:21:00     methadone
11  66531   2013-02-20 22:18:00     methadone

Затем переберите все комбинации строк. Это работает, но не самое эффективное решение. Если ваш набор данных очень большой, вы можете рассмотреть более элегантный подход.

drop_idx = set([])
for idx_early, row_early in df.iterrows():
    for idx_late, row_late in df.iterrows():
        if (row_early['Datetime'] + pd.DateOffset(hours=24) > row_late['Datetime'] and
            row_early['Datetime'] < row_late['Datetime'] and
            row_early['Drug'] == 'morphine' and
            row_late['Drug'] == 'methadone' and
            row_early['Id'] == row_late['Id']):
            drop_idx.add(idx_early)

Теперь отбросьте идентифицированные строки и напечатайте результат.

>>> df.drop(index=drop_idx)

    Id      Datetime                Drug
0   66531   2012-12-18 08:31:00     acetaminophen-HYDROcodone
1   66531   2012-12-18 17:44:00     acetaminophen-HYDROcodone
6   66531   2013-02-19 17:33:00     oxyCODONE
7   66531   2013-02-19 19:20:00     acetaminophen-HYDROcodone
8   66531   2013-02-19 20:54:00     methadone
9   66531   2013-02-20 06:46:00     methadone
10  66531   2013-02-20 13:21:00     methadone
11  66531   2013-02-20 22:18:00     methadone
5
задан Lucas 19 May 2009 в 14:41
поделиться

4 ответа

В CLR через C # Рихтер объясняет, что:

Специальный высокоприоритетный поток CLR предназначен для вызова методов Finalize

(см. заголовок «Завершение внутренних устройств» главы 20)

Это единственный контекст, в котором он говорит о потоке сборщика мусора. Чуть ранее в этой главе он объясняет, что сборка мусора запускается в ответ на одно из следующих событий:

  • Поколение 0 заполнено
  • Вызов GC.Collect
  • Windows сообщает о нехватке памяти
  • CLR выгружает домен приложения.
  • CLR завершает работу

... что говорит о том, что единственным потоком, созданным сборщиком мусора, является этот единственный, высокоприоритетный поток финализатора.

Редактировать : Затем он продолжает, в «Параллельной коллекции», чтобы объяснить, что:

В многопроцессорной системе, в которой запущена версия механизма исполнения для рабочей станции, сборщик мусора имеет дополнительный фоновый поток для одновременного сбора объектов во время работы приложения. [...] У сборщика мусора есть фоновый поток с обычным приоритетом, который помечает недоступные объекты.

9
ответ дан 18 December 2019 в 12:01
поделиться

The GC thread runs at a normal priority. The finalizer thread runs at "Highest" priority.

You can see this by turning on the Debug "Thread" window, and breaking anywhere in a managed application. The threads are all listed (although they're not named), with their priorities. It takes a bit to decipher which is which, but there will be an extra "Normal" and "Highest" priority thread, which correspond to the GC and the Finalizer thread.

5
ответ дан 18 December 2019 в 12:01
поделиться

сборщик мусора работает с более низким приоритетом, чем критические потоки

0
ответ дан 18 December 2019 в 12:01
поделиться

Приоритет потока GC - это деталь реализации, прямо сейчас они работают с нормальным приоритетом, однако поток финализатора работает с высоким приоритетом и также имеет тайм-аут.

0
ответ дан 18 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: