Если мы посмотрим ближе на диаграмму потока данных, мы можем заметить, что когда узел собирает данные со всех своих ребер, он начинает их обрабатывать.А для обработки ему нужен токен активности, который представляет доступ к процессору.Обычно процесс получения этого токена опускается, но он должен существовать.Как правило, весь узел в качестве токена помещается в двустороннюю очередь, где на другом конце этой очереди хранятся свободные действия (процессоры или потоки).Пул потоков - прекрасный пример такой очереди, и готовые к работе узлы представлены в виде задач.Как только узел встречает активность, они оба извлекаются из очереди и начинается фактическая обработка.Когда обработка заканчивается, активность возвращается в очередь.Таким образом, мы можем рассматривать деятельность как особый вид токена.
Таким образом, и диаграммы потока данных, и диаграммы действий являются просто упрощенными вариантами общей диаграммы потока активных данных, в которой опущены действия или токены данных.Но в целом оба вида токенов могут быть представлены на диаграмме одновременно.
Программисты привыкли думать о потоках как о действиях, но если мы посмотрим на них ближе, мы заметим, что когда поток готов к выполнению, онпопадает в очередь к процессорам, и реальное выполнение начинается только тогда, когда свободный процессор переключается на этот поток.Это абсолютная аналогия, поскольку задачи выполняются в пуле потоков.Таким образом, с упрощенной точки зрения поток - это действие, а с более строгой точки зрения поток - это токен данных, и единственное реальное действие - это физический процессор.Это показывает, что токены активности не отличаются от токенов данных.И действительно, мы можем опустить маршрут узла, преследующего действие, и рассматривать узел потока данных как само действие, которое начинает работать немедленно, когда все его ребра (входы) содержат данные.