{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "4020485b",
   "metadata": {},
   "source": [
    "# Тест по процессам и потокам #"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e130053",
   "metadata": {},
   "source": [
    "1. Все процессы работают в ОС\n",
    "\n",
    "- [x] последовательно, ОС занимается переключением контекста\n",
    "- [ ] параллельно, одновременно могут выполняться несколько процессов на одном ядре CPU"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7952a2d2",
   "metadata": {},
   "source": [
    "2. Предположим вывод команды `lsof` для процесса с `pid 1701`:\n",
    "\n",
    "```\n",
    "lsof -p 1701\n",
    "...\n",
    "python  1701 user  mem   REG    8,1 147688 781852  /lib/i386-linux-gnu/ld-2.23.so\n",
    "python  1701 user    0u  CHR  136,9    0t0     12  /dev/pts/9\n",
    "python  1701 user    1w  REG    8,1      0 545637  /home/user/log.txt\n",
    "python  1701 user    2u  CHR  136,9    0t0     12  /dev/pts/9\n",
    "```\n",
    "\n",
    "Стандартный вывод у процесса с `pid 1701` – это\n",
    "\n",
    "- [ ] терминал\n",
    "- [ ] область памяти в библиотеке `ld-2.23.so`\n",
    "- [x] файл `/home/user/log.txt`\n",
    "- [ ] отсутствует"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "693d6bbc",
   "metadata": {},
   "source": [
    "3. Выделить истинные выражения:\n",
    "\n",
    "- [x] выполнением Python потоков в Linux занимается операционная система\n",
    "- [x] все потоки разделяют память процесса в котором они созданы\n",
    "- [ ] выполнением Python потоков в Linux занимается процесс, в котором они запущены\n",
    "- [ ] у каждого потока есть собственная память\n",
    "- [x] потоки в Python выполняются в рамках одного процесса, разделяя GIL"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "591de8bd",
   "metadata": {},
   "source": [
    "4. Какие участки кода в Python могут выполняться без GIL?\n",
    "\n",
    "- [x] Вызовы сторонних библиотек на языке C\n",
    "- [ ] Функции, выполняющиеся в `ThreadPoolExecutor`\n",
    "- [ ] Функции, занимающиеся вычислениями на CPU\n",
    "- [x] Системные вызовы"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "43165d4c",
   "metadata": {},
   "source": [
    "5. Что происходит с памятью в дочернем процессе?\n",
    "\n",
    "- [ ] Разделяется с родительским процессом\n",
    "- [x] Копируется из родительского процесса"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
