Por padrão, o PHP armazena os dados da sessão em um arquivo (geralmente armazenado em / tmp, dependendo do sistema operacional).
Este arquivo obtém um bloqueio quando o PHP inicia uma sessão para evitar que outros processos alterem os dados e, assim, evitando condições de corrida.
Esse comportamento não causa problemas na maioria das situações, exceto quando o processamento assíncrono está envolvido.
Quando você dispara uma chamada assíncrona para o servidor (por exemplo, ajax do lado do cliente jquery), o servidor bloqueia o arquivo da sessão para permitir a gravação dos dados da sessão. Há apenas um problema com essa abordagem: se você tiver uma chamada assíncrona que leva muito tempo para processar, você diminui a velocidade de outras chamadas para o servidor porque elas têm que esperar até que a solicitação termine para remover o bloqueio do arquivo de sessão.
Você pode resolver isso facilmente usando session_write_close()
depois de terminar de gravar os dados da sessão.
Isso garante que os dados da sessão sejam gravados no arquivo da sessão e o bloqueio seja removido.